依赖
来源:4-5 依赖收集(上)

前端工程师666777888
2021-03-29
在收集依赖时。name属性会收集到computed watcher
其中的render watcher是被name收集了,还是被cName收集了
我感觉是被cName收集了,因为这个render watcher是在执行cName的get方法时被收集的。但是通过调试,我看到这个render watcher却被name收集了???
1回答
-
ustbhuangyi
2021-03-29
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。142021-04-08
相似问题