vue3响应性的丢失和保留
为什么会丢失响应性
失去响应性的情况出现在解构时。
vue2中使用Object.defineProperty()实现响应式,其原理是拦截了对象中属性的get/set,即使该属性被解构出来,仍然保留了get/set,因此不会丢失响应性。
而vue3中使用Proxy实现响应式,其原理是拦截了proxy对象的get/set,因此属性被解构出来后,对属性的读写不再经过原proxy对象的get/set,就丢失了响应性。
vue3中丢失响应式的情况比如有:解构响应式对象(即reactive()创建的对象)、解构props。
如何保留响应性
只要给响应式对象包一层toRefs即可:
function useMouse() {
const mouse = reactive({x: 0, y:0})
// 监听 mousemove 事件
return toRefs(mouse)
}
// x,y带有响应性
const {x, y} = useMouse()
toRefs() 函数可以将 reactive()创建出来的响应式对象, 转换为普通对象, 而这个普通对象上的而每一个属性都是响应式的。这样就解决了解构赋值的时候丢失响应性的问题了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!