[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 = [];
相关推荐
hhcccchh1 小时前
学习vue第八天 Vue3 模板语法和内置指令 - 简单入门
前端·vue.js·学习
yyf198905251 小时前
Vue 框架相关中文文献
前端·javascript·vue.js
粥里有勺糖1 小时前
开发一个美观的 VitePress 图片预览插件
前端·vue.js·vitepress
鹏多多2 小时前
jsx/tsx使用cssModule和typescript-plugin-css-modules
前端·vue.js·react.js
Cherry的跨界思维2 小时前
【AI测试全栈:Vue核心】22、从零到一:Vue3+ECharts构建企业级AI测试可视化仪表盘项目实战
vue.js·人工智能·echarts·vue3·ai全栈·测试全栈·ai测试全栈
ssshooter2 小时前
复古话题:Vue2 的空格间距切换到 Vite 后消失了
前端·vue.js·面试
小贵子的博客3 小时前
Ant Design Vue <a-table>
前端·javascript·vue.js·anti-design-vue
奋斗吧程序媛3 小时前
vue3 Study(1)
前端·javascript·vue.js
神秘的猪头4 小时前
🎨 CSS 这种“烂大街”的技术,怎么在 React 和 Vue 里玩出花来?—— 模块化 CSS 深度避坑指南
css·vue.js·react.js
夏天想4 小时前
element-plus的输入数字组件el-input-number 显示了 加减按钮(+ -) 和 小三角箭头(上下箭头),怎么去掉+,-或者箭头
前端·javascript·vue.js