vue3 reactive定义的引用类型直接赋值导致数据失去响应式问题
作者:秃头小宝贝@
这篇文章主要介绍了vue3 reactive定义的引用类型直接赋值导致数据失去响应式问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
reactive定义的引用类型直接赋值导致数据失去响应式
<script setup> import {reactive,onMounted} from 'vue' const userMenu=reactive([]) onMounted(()=>{ userMenu=[1,2,3] }) </script> <template> <div>示例:{{userMenu}}</div> </template> <style> </style>
如上代码,我们定义了一个userMenu的reactive数组,我们在onMounted生命周期直接给userMenu重新赋值为【1,2,3】,但是我们打开页面显示的仍然是之前的空数组
这是因为,reactive定义的数组或者对象,不能直接赋值修改,否则定义的数据userMenu将失去响应性。
我们可以按照如下代码:
<script setup> import {reactive,onMounted} from 'vue' const userMenu=reactive({ arr:[] }) onMounted(()=>{ userMenu.arr=[1,2,3] }) </script> <template> <div>示例:{{userMenu.arr}}</div> </template> <style> </style>
将空数组作为对象的一个属性,我们直接修改arr属性为【1,2,3】,此时userMenu不会失去响应性,页面内容也就跟着变化成【1,2,3】
注意:
vue3中reactive定义的引用类型直接赋值导致数据失去响应式,我们可以通过修改对象的属性的形式,实现修改数据
vue3中reactive的理解
1.什么是reactive?
reactive是Vue3中提供实现响应式数据的方法.
在Vue2中响应式数据是通过defineProperty来实现的.
而在Vue3响应式数据是通过ES6的Proxy来实现的
2.reactive注意点
reactive参数必须是对象(json/arr)
如果给reactive传递了其他对象,默认情况下修改对象,界面不会自动更新,如果想更新,可以通过重新赋值的方式.
错误示范
当传递的是非对象时,页面不会发生响应
正确实例
arr正确实例
传入数组会转成proxy对象
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。