其他分享
首页 > 其他分享> > Vue双向数据绑定 之 数据侦测(待优化)

Vue双向数据绑定 之 数据侦测(待优化)

作者:互联网

1.页面中使用到这个数据的地方是如何知道这个数据改变的?

- 页面中使用了data或者props数据的地方,都会被一个观察者观察着(当数据改变,这些观察者就会通知他们对应的位置该数据变化)

一个数据可能在页面中被使用了多次,就存在多个观察者观察这个数据,所以这个数据需要一个观察者的管理器(dep)。这个管理器是一个数组,管理着和这个数据相关的所有观察者。当数据变化的时候只需要通知这个管理器就可以了

在vue3之前,都是通过Object.defineProperty来给数据设置变化的。在set中通知改变,在get中添加观察者

观察者添加到管理器中的时机,观察者在初始化的时候会获取值,就会触发get,然后这个观察者就通过get添加到管理器中

当数据发生改变的时候,就会通知所有监听这个数据变化的观察者数据改变。(dep的遍历)

 

2.对数组变化的特殊侦测

可以修改原数组的方式:splice,sort,reverse,shift,unshift,pop,push

如果是通过这几种方式来修改的数组,变化不会被监听到。

但是原型上的方法又不能被拦截到,所以就通过重写原型链的方式来重写这几种方法。(但是不可能对全局的数组进行重写,只重写被监听的数组)

 

3.新添加的数据是不会被监听的

解决这个问题是,通过vm.$set来添加元素

原理是:给新添加的这个数据手动设置Object.defineProperty

对于那些自动调用没法实现响应式的,一般都是通过手动来实现

 

(感觉文章还需要深入讲解一下,结合一些代码)

标签:Vue,管理器,重写,绑定,观察者,添加,数组,侦测,数据
来源: https://www.cnblogs.com/kkkllo/p/13769905.html