老师,这是我对Dep.target如何保持唯一性的理解
来源:4-5 依赖收集(上)

ob小菜鸟好好看好好学
2020-02-26
场景:
new Vue({
el: '#app',
render: h => h(app)
})
1)初始化渲染时在根实例的mountComponent
方法中new Watcher()
在实例化watcher的过程中会调用updateComponent方法,这是会调用render函数,在执行render函数的过程中会访问data中的数据,这时会将当前的watcher放到targetStack数组中,此时的Dep.target是当前根实例的watcher
2)根实例还没渲染完成,会进行App组件的挂载,在组件的mountComponent方法中,也会new Watcher,在执行render函数的过程中由于访问了data中的数据会触发getter,会将组件的渲染watcher添加到targetStack的数组中,此时Dep.target是当前组件的渲染watcher
3)当组件的updateComponent方法执行结束后,会执行popTarget方法,从而继续执行根实例的mountComponent,当根实例的mountComponent结束后,会执行popTarget,将Dep.target恢复为根实例watcher
问题是
1)请问我上面对于实现Dep.target的唯一性理解是否正确。
2)Dep.target为什么要保持唯一性
写回答
1回答
-
你的理解基本正确,流程图也画的很棒,先给你点个赞。
其次,Dep.target 保持唯一性是因为同一时间只会有一个 watcher 被计算,Dep.target 就表示正在计算的 watcher
10
相似问题