Skip to content
On this page

依赖收集

数据发生了变化,我们不可能去更新整个视图,所以我们需要判断视图中谁用到了这个数据,去更新这部分的视图。所以我们会将这种依赖关系存放至一个数组中,当数据发生变化的时候,遍历对应的数据,去更新视图,就可以达到我们想要的目的了。

  • 什么时候收集依赖? 在 getter 中调用 dep.depend( )

  • 什么时候通知依赖去更新视图? 在 setter 中调用 dep.notify( )

dep类

地址:src/core/observer/dep.js

作用:管理依赖

js
class Dep {
      constructor(){
      // 存放watcher实例
          this.deps=[]
      }
      // 添加依赖
      addDep(dep){
          this.deps.push(dep)
      }

     // 移除一个依赖
      removeSub (sub: Watcher) {
          remove(this.subs, sub)
      }

      // 当Dep上有静态属性target时,就调用Dep.target的adddDep方法,进行添加依赖到deps数组中
      depend () {
          if (Dep.target) {
            Dep.target.addDep(this)
          }
      }

      // 通知所有订阅者进行更新
      notify(){
          const subs = this.subs.slice()
          for (let i = 0, l = subs.length; i < l; i++) {
              // update的方法更新视图
              subs[i].update()
          }
      }
  }

从上面的代码可知,我们用 Dep 类去存放依赖。

我们的数据是可观测的,我们又知道了依赖是什么时候存放的,什么时候去通知更新视图的。

那么,What is 依赖? 什么是依赖?

Released under the MIT License.