美文网首页
2020-11-06 vue执行过程理解

2020-11-06 vue执行过程理解

作者: 李华峰0722 | 来源:发表于2020-11-13 09:58 被阅读0次

参考资料:vue打包后的源码
学习方法:浏览器调试
使用的测试案例:
(一个模板对应一个renderWatcher,一个renderWatcher对应一个render function )
(data中的一个属性对应一个dep 例如 message对应dep(message)a对应dep(a)b对应dep(b))
(computed不对应dep)
<div>{{message}} {{a}} {{c}} {{a}} {{b}}</div>
data: {
message: 1,
a: 1,
b: 2
}
computed: {
c () {
return this.a + this.b + 22
}
}
attrlisteners进行数据响应式
然后将computed中的属性进行响应式 并且为computed中的每一个属性生成一个computedWatcher对象【一个属性c对应一个computedWatcher对象】、并为该属性生成一个getter方法[c () {return this.a + this.b + 22}] 并将该属性进行数据响应式

程序往下执行,然后会一个new renderWatcher()
watcher的实例化过程会调用vm._update(vm._render()),
其中,vm._render会生成一个render函数,render函数执行的时候会获取指令模板中的值,进而触发各个属性(message a b c)的getter方法
getter方法中一方面获取到了值,另一方面完成了依赖搜集
message属性的getter触发 dep(message) [renderWatcher]
a属性的getter触发dep(a) [renderWatcher]
b属性的getter触发dep(b) [renderWatcher]
c属性的getter会执行this.a + this.b + 22 会调用a属性的getter和b属性的getter
进而使得
dep(a) [renderWatcher computedWatcher(c)]
dep(b) [renderWatcher computedWatcher(c)]

render函数获取完值之后,生成了vnode对象
调用vm._update(vnode) 进而调用vm.patch 完成视图的更新

==================================================================
当a的值发生改变时,
会触发dep(a) .notify
进而使得renderWatcher和computedWatcher进行处理(执行wathcer的update函数)
renderWatcher会进入到queueWatcher队列中,交由异步队列处理
computedWatcher会 if (watcher.lazy) watcher.dirty = true;将dirty设置为true

然后开始执行异步队列,进而执行renderWatcher.run(),进而调用vm._update(vm._render()) 后续过程同前文描述 【 这后面的过程还会去调用computedWatcher的getter函数获取值,这个时候重新进行依赖收集,数据更新】

相关文章

  • 2020-11-06 vue执行过程理解

    参考资料:vue打包后的源码学习方法:浏览器调试使用的测试案例:(一个模板对应一个renderWatcher,一个...

  • Vue父子组件生命周期执行顺序

    1、vue的生命周期 2、实际操作 下面我们在实际的代码执行过程中理解父子组件生命周期创建过程以及钩子函数执行的实...

  • 理解Javascript执行过程

    本文来自 龙恩0707: 理解Javascript执行过程 Javascript是一种解释型的动态语言。 在程序中...

  • Vue导航守卫

    Vue导航守卫 理解 导航守卫也叫路由守卫,可以实时的监控路由的跳转过程,在路由的跳转的各个过程执行相应的操作,有...

  • vue相关原理图解

    MVVM 生命周期 vue初始化及更新 new Vue()首先执行初始化,对data执行响应化处理,这个过程发生O...

  • Vue源码浅析01

    Vue源码大致可以理解分为:初始化属性、方法(Vue.use、***等等)和实例化(new Vue)执行的一些方法...

  • vue模板渲染--compile

    模板渲染过程在实际使用vue的过程可能并不需要太深理解,但就vue来说,这些底层思想可以更好地让我们理解这个框架,...

  • 一看就懂得Vue生命周期

    上图 1、创建vue实例,Vue();2、在创建Vue实例的时候,执行了init(),在init过程中首先调用了b...

  • (ES6)vue从读取图片到压缩图片,再到读取base64图片上

    作者是在vue上做的开发,可能对有学过vue学者比较友好 首先,我们看看整个执行过程的类型转换 input -->...

  • vue生命周期

    vue生命周期用过哪些 怎么用 mounted 里面放什么 vue祖孙组件的执行过程 祖 组件先准备挂载 但最后挂...

网友评论

      本文标题:2020-11-06 vue执行过程理解

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