[Vue3] reactive数据改变,视图不更新的问题

问题

在vue文件中,创建响应式对象,赋值后却无法触发响应式,即页面的值不会改变

javascript 复制代码
const obj = {
	name: 'xiaoming',
	age: 18
}
let form = reactive({});
form = obj;

上述代码中,form的值是会改变,但是页面显示中的form值不会改变,不会发生响应式变化。

原因

使用reactive返回的并不是一个对象,而是对象的响应式代理,即被proxy包裹的对象。如果给它重新赋值,那么就相当于改变了对象的地址,就不是原来的对象了,其响应式就会失效。

解决方法

  1. 将reactive对象包裹一层
javascript 复制代码
const obj = {
	name: 'xiaoming',
	age: 18
}
let form = reactive({
	attr: {}
});
form.attr = obj;

给form对象里的attr对象赋值,不会失去响应式。

  1. 直接使用ref
javascript 复制代码
const obj = {
	name: 'xiaoming',
	age: 18
}
let form = ref({});
form.value = obj;

使用ref定义数组

数组与对象一样,也会发生上述问题,所以建议使用ref来定义数组,数组赋值时,不会失去响应式。

javascript 复制代码
let arr = ref([1, 2, 3]);
arr.value = [];
相关推荐
xiaohua0708day8 小时前
Lodash库
前端·javascript·vue.js
万物皆对象6668 小时前
切换路由时页面空白问题(vue3)
前端·vue.js·typescript
李剑一10 小时前
小红书前端架构面试问的挺深入啊!面试官:Vue中组合式API与选项式API的设计权衡
vue.js·面试
一 乐11 小时前
汽车租赁|基于SprinBoot+vue的汽车租赁管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·汽车·论文·毕设·汽车租赁管理系统
MaCa .BaKa15 小时前
55-宠物爱心救助领养系统-宠物救助领养系统
java·vue.js·tomcat·maven·springboot·宠物救助领养系统
海鸥两三16 小时前
基于 Vue 3 + 高德地图的网格规划系统实战(有源码)
前端·javascript·vue.js
专注VB编程开发20年17 小时前
我制作excel工作簿的选项卡,发给deep seek, 昨天修改了一天
前端·vue.js·excel
qq_4203620317 小时前
前端国际化方案
前端·javascript·vue.js·国际化·reactjs
香香爱编程18 小时前
vue3自定义顶部弹窗
前端·javascript·vue.js
蜡台18 小时前
Vue Echart 的 **高阶组件化** 封装思路
前端·javascript·vue.js·echarts