vue
源码中defineReactive
中监听数据的有段代码如下:
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function reactiveGetter () {
if (Dep.target) {
dep.depend()
}
return value
}
})
我的理解是:
vue
先进行初始化,在这个过程中methods
、生命周期
...初始化完成并设置data
的setter
和getter
。
但是在初始化的过程中是没有进行依赖收集的,因为这个时候并不知道哪些数据是有用的。
初始化完成之后会进行一次render
在这个过程中会读取到data
中一些有用到的数据,因为在初始化的时候设置了getter
所以就会触发依赖收集,也就是上面代码的dep.depend()
所以在我理解这个Dep.target
就是用来区别是初始化阶段还是render
阶段,然后才判断是否进行依赖收集。
以上是我的一些想法,因为看了源码还是没能理解这个Dep.target
的作用,然后查询了一些文章结合自己的理解做出了以上总结,如果有误或者不准确的地方,烦请各位大佬提出并解释。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…