[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 = [];
相关推荐
切糕师学AI41 分钟前
前后端分离架构中,Node.js的底层实现原理与线程池饥饿问题解析
前端·vue.js·node.js
书源2 小时前
灵活性和可维护性,被严重低估的编程原则
前端·javascript·vue.js
计算机学姐3 小时前
基于Python的旅游数据分析可视化系统【2026最新】
vue.js·后端·python·数据分析·django·flask·旅游
随风飞翔的胖子4 小时前
js-cookie详细介绍及在vue3中的使用方法
vue.js·浏览器
幻灵尔依4 小时前
前端编码统一规范
javascript·vue.js·代码规范
欢脱的小猴子4 小时前
VUE3加载cesium,导入czml的星座后页面卡死BUG 修复
前端·vue.js·bug
小菜全6 小时前
Vue 3 + TypeScript 事件触发与数据绑定方法
前端·javascript·vue.js
an__ya__8 小时前
Vue数据响应式reactive
前端·javascript·vue.js
叶落阁主8 小时前
Neovim 插件 i18n.nvim 介绍
java·vue.js·vim
叫我詹躲躲8 小时前
开发提速?Vue3模板隐藏技巧来了
前端·vue.js·ai编程