vue的watcher

2020-04-02  本文已影响0人  看到这朵小fa了么

user-watcher

在页面中使用的watcher,即用户定义的watcher,用于观察一个属性的更新,支持数组定义多个,对象定义单个的形式,在initWatcher中进行watcher的初始化之后,在渲染函数进行数据的读取,触发依赖收集时会将user-watcher的依赖收集进去,data属性set更新时会被触发user-watcher所定义的回调函数(将新旧值传入),支持异步操作
可选项:immediate deep sync

render-watcher

每一个组件都有一个render-watcher当data/computed中的有被依赖的属性改变的时候会触发render-watcher的更新,表达式为function(){vm._update(vm.render(), hydrating)}

computed-watcher

总结

这三种watcher执行顺序为computed watcher => user watcher => render watcher,这样做 尽可能的保证了视图更新时数据是最新的
收集依赖是在render tree渲染时读取render tree的结构,触发依赖的收集,每一次都只会对一个观察者进行操作,所以一个时间点只有一个Dep.tatget,说明这个观察者是依赖于当前的数据,就会把这个观察者添加到该数据的subs里面,会通过id来防止重复添加,同时会将依赖添加到自身的deps中以便通过set调用dep.notify()

什么时候触发了依赖的收集

实现:https://blog.csdn.net/wangweianger/article/details/80307819

上一篇 下一篇

猜你喜欢

热点阅读