[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 = [];
相关推荐
q***38514 小时前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
喵个咪4 小时前
go-kratos-admin 快速上手指南:从环境搭建到启动服务(Windows/macOS/Linux 通用)
vue.js·go
用户841794814564 小时前
vxe-gantt table 甘特图如何设置任务视图每一行的背景色
vue.js
小章鱼学前端5 小时前
2025 年最新 Fabric.js 实战:一个完整可上线的图片选区标注组件(含全部源码).
前端·vue.js
涔溪5 小时前
实现将 Vue3 项目作为子应用,通过无界(Wujie)微前端框架接入到 Vue2 主应用中(Vue2 为主应用,Vue3 为子应用)
vue.js·前端框架·wujie
源码技术栈7 小时前
什么是云门诊系统、云诊所系统?
java·vue.js·spring boot·源码·门诊·云门诊
lcc1877 小时前
Vue3 ref函数和reactive函数
前端·vue.js
艾小码7 小时前
还在为组件通信头疼?defineExpose让你彻底告别传值烦恼
前端·javascript·vue.js
带只拖鞋去流浪7 小时前
迎接2026,重新认识Vue CLI (v5.x)
前端·vue.js·webpack
Coder-coco7 小时前
游戏助手|游戏攻略|基于SprinBoot+vue的游戏攻略系统小程序(源码+数据库+文档)
java·vue.js·spring boot·游戏·小程序·论文·游戏助手