【JS】【Vue3】Proxy理解
【JS】【Vue3】Proxy理解
在Vue3中,响应式数据的实现方式从原来Vue2的Object.defineProperty()
更换为了Proxy
,本质上还是对数据进行拦截,通过getter
和setter
实现页面的响应式更新。
Vue2中Object.defineProperty
存在的问题:
- 给对象添加或删除属性时,页面不会立即更新
- 通过数组下标修改数组元素,页面不会立即更新
解决方案:
- 使用Vue提供的
Vue.set()
方法【或者vm中的$set
方法】 - 使用数组的方法对数组进行操作,避免使用下标操作数组
Vue3中使用Proxy来代替Object.defineProperty()
,解决了上述问题
Proxy
使用示例:
Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。
let objectDemo = {
keyA: 1,
keyB: 2,
keyC: 3
}
let proxyObject = new Proxy(objectDemo, {
get(obj, prop){
console.log('getter was called!')
console.log(`value is ${obj[prop]}`)
return obj[prop]
},
set(obj, prop, value){
console.log('setter was called')
obj[prop] = value
},
deleteProperty(target, prop) {
console.log(`${p}属性被删除了`)
return delete target[prop]
}
})
这段代码首先创建了一个普通对象objectDemo
,然后实例化了一个Prox对象,构造函数中分别传入了objectDemo
和一个配置对象。
配置对象中配置了getter和setter,可拦截数据进行操作。同时,当使用delete
关键字删除Proxy对象的属性时,deleteProperty
配置项的函数将会执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构