采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
在收集依赖时。name属性会收集到computed watcher 其中的render watcher是被name收集了,还是被cName收集了
我感觉是被cName收集了,因为这个render watcher是在执行cName的get方法时被收集的。但是通过调试,我看到这个render watcher却被name收集了???
name 也要收集 render watcher。 理由如果只有 computed watcher 被收集那么 name 触发 set只会通知 computed watcher 的 update而 computed watcher 由于 lazy 为 true所以只是把 dirty 设置为 true 但是我们知道实际上如果 name 发送改变触发 set整个组件会重新渲染那是为什么呢因为 name 也收集了 render watcher什么时候收集的呢注意看在 computed watcher 本身完成依赖收集后这个时候 Dep.target 又指回了 render watcher然后执行 computed watcher 的 depend 方法目的是让 computed watcher 的 dep 再次收集依赖因为在每次 watcher 执行 get 计算完毕后都会执行 cleanUpDeps所以这里的 this.deps 实际上指向的就是 这个 computed watcher 的对应的 deps在这个场景就是 name 创建出来的 dep但是此时 Dep.target 已经是 render watcher那么就相当于让 name 收集了 render watcher。
谢谢。看到cleanUpDeps函数,我好像知道了
执行this.deps[i].depend()。此时这个dep会再次收集依赖,现在的依赖是render watcher。所以nane属性收集到了render watcher 这就是dep和wacher间来回调用的最好见证 一般的收集依赖都是直接执行dep.depend()。此时的场景通过wacher间接调用
是的,不过为啥我的回复中间的标点符号都没了。。
登录后可查看更多问答,登录/注册
全方位讲解 Vue.js 源码,进阶高级工程师
3.1k 4
1.6k 20
1.3k 14
1.3k 12
2.2k 12