Vue2 和 Vue3 的区别
vue3 中使用了ES6 的 ProxyAPI 对数据代理,监测的是整个对象,而不再是某个属性。
消除了 Vue 2 当中基于 Object.defineProperty 的实现所存在的很多限制
vue3可以监测到对象属性的添加和删除,可以监听数组的变化;
vue3支持 Map、Set、WeakMap 和 WeakSet。
<script>
const state = reactive({
name:'你好',
arr: [1,2,3],
age: 11
})
console.log('woshi', state.name);
state.age = 55
console.log('----', state.age);
function reactive(target) {
if (!(typeof target == 'object' && target != null)) {
return target
}
return new Proxy(target, {
get(target, key, receiver) {
const res = Reflect.get(target, key, receiver)
console.log('使用', target, key, res);
return res
},
set(target, key, value, receiver) {
const res = Reflect.set(target, key, value, receiver)
console.log('修改', target, key, res);
return res
}
})
}
</script>