[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 = [];
相关推荐
格子软件9 小时前
2026年GEO优化系统源码的分布式状态机深度拆解
java·前端·vue.js·vue·geo
格子软件10 小时前
2026年GEO优化系统源码解构:核心状态机与高并发流控深度剖析
java·vue.js·spring boot·vue·geo
格子软件12 小时前
2026年GEO优化系统源码级状态机与多模型调度拆解
java·前端·vue.js·人工智能·vue·geo
HUMHSX13 小时前
Vue 项目启动全流程解析:从入口文件到全局指令注册与页面渲染
前端·javascript·vue.js
an3174214 小时前
弹窗数据流设计的两种高阶架构实践
前端·vue.js·架构
李明卫杭州15 小时前
Vue2 中 v-model 处理不同数据结构的技巧
前端·javascript·vue.js
李明卫杭州15 小时前
使用 computed 处理 v-model 复杂数据结构
前端·javascript·vue.js
格子软件17 小时前
2026年分布式GEO优化系统源码状态机深度拆解实录
java·前端·vue.js·vue·geo
格子软件19 小时前
格子GEO优化系统源码深度解析:从零搭建AI驱动的内容矩阵
java·vue.js·人工智能·spring boot·vue·geo
咪库咪库咪2 天前
vue3-组件
vue.js