Appearance
依赖收集
数据发生了变化,我们不可能去更新整个视图,所以我们需要判断视图中谁用到了这个数据,去更新这部分的视图。所以我们会将这种依赖关系存放至一个数组中,当数据发生变化的时候,遍历对应的数据,去更新视图,就可以达到我们想要的目的了。
什么时候收集依赖? 在 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 依赖? 什么是依赖?