vue2 vue3的原理
时间: 2023-12-05 14:40:59 浏览: 90
Vue2的响应式原理是通过Object.defineProperty()来劫持各个属性的setter和getter,在数据发生变化的时候发布消息给订阅者,触发响应的监听回调。这种方式需要遍历对象的每个属性,将它们转换为getter和setter,因此在处理大量数据时会有性能问题。
Vue3中使用了Proxy来代替Object.defineProperty(),Proxy可以直接监听整个对象而非属性,可以监听到对象属性的增加和删除,界面会随之更新。Proxy的优势在于可以直接监听对象而不需要遍历每个属性,因此性能更好。同时,Proxy还提供了一些Reflect API,例如Reflect.get()、Reflect.set()、Reflect.deleteProperty()等,可以更方便地操作对象。
下面是Vue3中使用Proxy的示例代码:
```javascript
const p = new Proxy(obj, {
get(target, prop) {
console.log("get:", target, prop);
return prop;
},
set(target, prop, value) {
console.log("set:", target, prop, value);
return true;
},
deleteProperty(target, prop) {
console.log("delete:", target, prop);
return delete target[prop];
},
});
```
阅读全文