1.VUE3.0的响应式通过Proxy(代理): 拦截对data任意属性的任意(13种)操作, 包括属性值的读写, 属性的添加, 属性的删除等…通过 Reflect(反射): 动态对被代理对象的相应属性进行特定的操作let obj = {name: 张三,ag...
1.VUE3.0的响应式
- 通过Proxy(代理): 拦截对data任意属性的任意(13种)操作, 包括属性值的读写, 属性的添加, 属性的删除等…
- 通过 Reflect(反射): 动态对被代理对象的相应属性进行特定的操作
let obj = {
name: '张三',
age: 26,
wife: {
name: '李四',
age: 25
}
};
/*
* 把目标对象变成代理对象
* 参数:
* 参数一:obj=>需要代理的目标对象
* 参数二:handler=>处理器对象,用来监视数据及数据的操作
*/
let proxyObj = new Proxy(obj, {
/*
* 修改目标对象的属性值为目标对象添加的新属性
* 参数:
* 参数一:obj=>需要代理的目标对象
* 参数二:prop=>需要设置值的key
* 参数三:value=>需要设置的值的value
*/
set(obj, prop, value) {//
console.log('set方法调用了', obj, prop, value);
return Reflect.set(obj, prop, value);
},
/*
* 获取目标对象的某个属性值
* 参数:
* 参数一:obj=>需要代理的目标对象
* 参数二:prop=>需要获取值的key
*/
get(obj, prop) {
console.log('get方法调用了', obj, prop);
return Reflect.get(obj, prop);
},
/**
* 删除目标对象上的某个属性
* 参数:
* 参数一:obj=>需要代理的目标对象
* 参数二:prop=>需要删除值的key
*/
deleteProperty(obj, prop) {
console.log('deleteProperty方法调用了', obj, prop);
return Reflect.deleteProperty(obj, prop);
}
});
proxyObj.name = '996';//改
console.log(proxyObj.name);//查
delete proxyObj.age;//删
console.log(obj);
proxyObj.wife.sex = '女';//增
console.log(obj);
2.VUE2.X实现响应式
- 对象: 通过defineProperty对对象的已有属性值的读取和修改进行劫持(监视/拦截)
- 数组: 通过重写数组更新数组一系列更新元素的方法来实现元素修改的劫持
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
</style>
</head>
<body>
<input type="text">
<span></span>
<script>
let obj = { name: 'zhangsan' };//初始数据
let newObj = JSON.parse(JSON.stringify(obj));//深拷贝数据
Object.defineProperty(obj, 'name', {
set(value) {
if (value !== obj.name) {
newObj.name = value;
observe();
}
},
get() {
return newObj.name
}
});
function observe() {
document.querySelector('span').innerText = obj.name;
document.querySelector('input').value = obj.name;
}
observe();
document.querySelector('input').addEventListener('input', function () {
obj.name = this.value
}, false)
</script>
</body>
沃梦达教程
本文标题为:VUE3.0-对比VUE2.X和VUE3.0的响应式
基础教程推荐
猜你喜欢
- HTML clearfix清除浮动讲解 2022-11-20
- Ajax+smarty技术实现无刷新分页 2022-12-15
- uniapp开发微信小程序自定义顶部导航栏功能实例 2022-10-21
- cocos creator游戏实现loading加载页面,游戏启动加载动画 2022-10-29
- JS滚动到顶部踩坑解决记录 2023-07-10
- 使用ajax跨域调用springboot框架的api传输文件 2023-02-23
- Javascript Bootstrap的网格系统,导航栏和轮播详解 2023-08-11
- 在实战中可能碰到的几种ajax请求方法详解 2023-02-01
- Ajax发送和接收请求 2022-12-15
- 关于Ajax跨域问题及解决方案详析 2023-02-23