这里关于dep和watcher
来源:4-5 依赖收集(上)

MeSKiL
2019-10-30
这里其实是一个watcher上记录(newDeps)自己监听的dep,dep存放(subs)监听自己的watchers。
也就是说触发了getter之后,watcher上就会记录这个dep是被自己监听的。dep上也会记录这个watcher是监听自己的。
addDep (dep: Dep) {
const id = dep.id
if (!this.newDepIds.has(id)) {
this.newDepIds.add(id)
this.newDeps.push(dep)
// 如果newDepsId里没有,就再这个watcher的newDeps里记录这个dep
if (!this.depIds.has(id)) {
// 就说明这个watcher这次应该在dep里但是上次不在dep的监听里,所以要给dep添上这个watcher
dep.addSub(this)
}
}
}
是这样的嘛,我觉得他这个绕就是绕在他是一个双向的过程,有就一起有,没有就一起没有,清空的时候,如果这个watcher不监听某个dep了,那在dep里也要清除相应的watcher
写回答
1回答
-
watcher 和 dep 是互相持有的关系,可以理解成一个多对多的关系,在定义响应式对象的时候会创建 dep,在对象被访问触发 getter 的时候就会触发 dep.depend 做依赖收集,作为依赖收集到当前正在计算的 watcher 中,这个 watcher 可以是 render watcher,可以是 computed watcher,也可以是 user watcher。
watcher 内部维护了 deps 和 newDeps 也是为了可以让 watcher 可以在每次计算完成清空不需要要的 dep 依赖了。
012019-10-31
相似问题