关于渲染watcher

来源:4-10 检测变化的注意事项

zhaobao1830

2021-10-30

老师您好,在响应式这章中给data添加get,每一个响应的属性都有一个dep,然后dep会把当前的渲染watcher加入数组中。在一个组件中多个响应数据的watcher应该是同一个实例对象吧。所以在后续的set中,如果一次修改多个数据,那么就会触发多次的dep通知。但是他们的watcher是同一个实例,在遍历watcherqueue依次执行每一个watcher.run()不就重复了吗,这个我有点不太理解

写回答

1回答

ustbhuangyi

2021-10-31

默认情况下这些都是异步 watcher,会先执行 queueWatcher 把 watcher 添加到一个队列中,然后在 nextTick 后执行一次 watcher.run。在添加的过程中,会做判断,并不会重复添加相同的 watcher。

0
1
zhaobao1830
嗯,看到了,会通过一个has对象保存以加入到队列的watcher队列,执行完又重置了。上次没看那么仔细。
2021-11-02
共1条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程