美文网首页
vue源码解读--派发更新

vue源码解读--派发更新

作者: 习惯水文的前端苏 | 来源:发表于2021-01-22 14:47 被阅读0次

目录导航

上一节我们分析了依赖收集的过程,当访问data时将触发get;这一节我们来尝试分析派发更新的过程,即更新data时触发的set做了什么

示例代码如下

打开控制台,第一次页面渲染的值是

当组件mounted之后,调用this._data.meta.msg='周五是等放假的一天'后,页面上渲染的结果就变成了

之所以有这样的变化就是因为,callHooks mounted的调用是在页面已经经过update将vnode patch为dom之后,因此第一次是初始值"腊八节快乐呀",当调用callHook执行mounted之后,由于我们已经完成了依赖收集,故对msg的修改将触发响应,即派发更新

        \bullet 如果两次的值相等,则什么也不做

        \bullet 如果发现新值又是一个对象,那么将其变成响应式的

        \bullet 最后调用dep.notify派发广播

            \star this.subs是保存的订阅者watcher

            \star 调用watcher的update派发更新,update接收到dep发出的广播之后调用queueWatcher

                queueWatcher向queue中push了一位,并调用nextTick,将flushSchedulerQueue方法作为回调传入

                nextTick中将flushSchedulerQueue推入callbacks

                当callbacks被遍历执行时,实际上执行的是flushSchedulerQueue函数

                    可以看到,他对每一个queue成员(watcher)调用了before方法,即在实例化watcher时传入的,并通知用户开始进行更新流程

                    接着调用watcher.run方法,在run方法中又执行了this.get()方法

                    this.getter即在实例化watcher时传入的

                    因此进入render和update过程,msg被修正为'周五是等放假的一天'

相关文章

  • vue源码解读--派发更新

    上一节我们分析了依赖收集[https://www.jianshu.com/p/c2320aeb67f4]的过程,当...

  • vue源码解读--props(更新)

    本节示例代码如下 父组件 子组件 定位断点 经过之前章节的介绍,我们知道了。父组件中存在components属性时...

  • Vue 源码解读-异步更新

    通过Object.defineProperty为对象的每个 key 设置 getter、setter,从而拦截对数...

  • vue源码解读--组件更新流程

    经过之前章节的分析,我们知道,组件的render将触发update并最终执行patch render关键信息如下 ...

  • vue的setter 派发更新

    我学习得过程是看源码视频的 我在网上看到一个版本记录的 我感觉他是跟我看的同一个视频 所以我就直接引用记录下来...

  • 2019-10-11

    vue源码解读(一) 1.Object.defineProperty的深入简出 标题 ...

  • vue源码解析六 -- 依赖收集,派发更新和nextTick

    依赖收集 上篇文章中我们讲了响应对象,这次看看他是如何来做依赖收集的,首先我们看看一下依赖收集的源码 解释1 vu...

  • Vue源码解读(四):更新策略

    之前介绍过初始化时 Vue 对数据的响应式处理是利用了Object.defifineProperty(),通过定义...

  • vue-hackernews-2.0 细节解读

    前言 本文按源码文件分解解读了vue-hackernews-2.0开源项目中的一些知识点,作为对项目源码解读的细节...

  • vue源码解读

    渲染优先级 优先使用render函数,没有才会使用template选项 编译的过程是将template编译成ren...

网友评论

      本文标题:vue源码解读--派发更新

      本文链接:https://www.haomeiwen.com/subject/tladzktx.html