[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 = [];
相关推荐
会敲代码的柯基31 分钟前
vue3和elementPlus里配置多语言切换vue-i18n
vue.js
独立开阀者_FwtCoder44 分钟前
Nginx 通过匹配 Cookie 将请求定向到特定服务器
java·vue.js·后端
coding丨2 小时前
自制微信小程序popover菜单,气泡悬浮弹窗
前端·javascript·vue.js
北凉温华3 小时前
Vue 3 + AntV X6 实现流程编辑功能
前端·vue.js
独立开阀者_FwtCoder4 小时前
从卡顿到丝滑,AI 应用体验跃升的幕后推手是它!
前端·vue.js·面试
橙某人4 小时前
✂️图片裁剪进阶篇 - 固定比例与裁剪模式
前端·javascript·vue.js
困困的果果头6 小时前
【vue + element】el-table支持多层级合并列
前端·javascript·vue.js·elementui
Nano6 小时前
Vue 3.5 v-model 原理、自定义实现及与 Vue 2 的对比
前端·vue.js
Hilaku7 小时前
🔥这 10 个 Vue3 性能优化技巧,藏太深了,建议保存!
前端·javascript·vue.js
一只猫猫熊7 小时前
Vue实战:手把手教你封装一个可拖拽并支持穿透操作的弹窗组件
前端·vue.js