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

0
0

快乐动起来呀

2019-08-12

开始监听变量的时候

0
0

前端跳槽面试必备技巧 面试官全流程指导

一门让你能成功获取前端 Offer 的课程, 不只是技术,面试“技巧”也至关重要

4836 学习 · 830 问题

查看课程