请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

这里关于dep和watcher

这里其实是一个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 依赖了。 

0 回复 有任何疑惑可以回复我~
  • 提问者 MeSKiL #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-10-31 10:40:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信