Open kankan-web opened 1 month ago
双向绑定是指:数据变化更新视图,视图变化更新数据。 vuejs是采用数据劫持结合发布者-订阅者模式的方式实现。通过Object.defineProperty()来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。主要分为以下几个步骤:
Vue2中使用Object.defineProperty来进行数据劫持。 但是它存在以下缺点:
$set
来调用Object.defineProperty()
处理简单来说就是,重写了数组中的那些原生方法,Vue将data中的数组进行了原型链重写,指向了自己定义的数组原型方法。这样当调用数组api时,可以通知依赖更新。如果数组中包含着引用类型,会对数组中的引用类型再次递归遍历进行监控。这样就实现了检测数组变化。
vue3使用Proxy机制代理需要响应化的数据。 Proxy时ES6中提供的功能,具有以下特点:
判断当前Reflect.get的返回值是否为Object,如果是则通过reactive方法做代理,这样就实现了深度观测
我们可以判断key是否为当前被代理对象target自身属性,也可以判断旧值与新值是否相等,只有满足以上两个条件之一时,才有可能执行trigger。
【vue】Vue是如何实现数据双向绑定的?
相关问题