标签:03 target Reflect reactive propName vue3 defineProperty
介绍
在上次ref的使用中我们提到,vue3对象的响应式通过reactive来实现。
示例
setup(props,context){
let data=reactive({
name:'张三',
age:18,
hobby:['抽烟','喝酒','烫头']
})
function changeInfo() {
data.hobby[0]='学习'
}
return{
data,
changeInfo
}
}
- 在vue3中,对象的响应式原理采用了proxy实现。proxy是es6的一个新的技术,proxy(代理对象)。
vue3响应式原理解析
const p=new Proxy(person,{
// 读取属性时触发
get(target,propName){
return target[propName]
},
// 新增或修改属性时触发
set(target,propName,value){
target[propName]=value
},
/* 删除属性时触发 */
deleteProperty(target,propName){
delete target[propName]
}
})
let x1= Reflect.defineProperty(person,'name',{
get(){
return 3
}
})
let x2= Reflect.defineProperty(person,'name',{
get(){
return 4
}
})
-
与Object.defineProperty不同的是,prosy可以直接监听或拦截对象属性修改的操作。通过 Reflect.defineProperty()来修改源数据的
- Reflect.setPrototypeOf
- Reflect.deleteProperty
- Reflect.getPrototypeOf
以上三个Reflect的操作可以直接操作对象的属性,和object操作一样。
结尾
在vue3中更多的推荐使用reactive来定义数据。
标签:03,target,Reflect,reactive,propName,vue3,defineProperty 来源: https://blog.csdn.net/weixin_45124398/article/details/120764279
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。