Watcher的使用时机是什么
来源:4-8 mvvm框架(源码分析)

刘少川
2019-08-12
何时new Watcher() 操作呢?
2回答
-
前端_未入门
2019-10-19
vue 中 new Watcher 其实有 3 个时机
1 调用 mountComponet 的时候 new Watcher 这个 watcher 是一个渲染 watcher,首次渲染生成 vnode 的过程中访问到定模板中定义的数据触发 getter,做一次依赖收集,这条数据的 dep 就订阅了这个渲染 watcher,当数据改变执行 dep.notify 的时候,会执行 watcher.update 最终执行一次真实的渲染
2 计算属性的时候,此时也会 new Watcher 这个 watcher 是个 compute watcher ,是在 vue 的 initState 中会 initComputed,这个 computed watcher 不会立刻执行 getter 而是当生成 vnode 的时候访问到某个计算属性的值的时候,会触发 computed getter,进而执行 computed 的回调,回调里面的数据此时都会收集这个 comupted watcher,数据改变的时候 computed watcher 的 update 会执行
3 vue 中 watch 某个数据变化的时候,也会 new Watcher 这个 watcher 是个 user watcher,在 initComputed 之后就会 initWatch,内部其实是手动调用了 vm.$watch 这个 api,原理也是拿到 watch 的每个 key 做一次访问,触发对应数据的 getter,进而让这些数据的 user watcher 订阅这条数据的 dep,这样数据改变的时候,会触发这个 user watcher 的 update
00 -
快乐动起来呀
2019-08-12
开始监听变量的时候
00
相似问题