Vue3 ref数组对象更新不及时一种解决办法

1.问题

在用vue3使用ref 时,有时遇到数组更新不及时的情况。具体就是 arr = ref([]); 在JS代码中更新arr.value = [1,2,3]; 通过控制台打印数据发现arr已经更新了,但是页面中的数据却迟迟没有反应。

2.问题原因

Vue3 的响应系统是基于 JavaScript 的Proxy实现的。这意味着 Vue 可以拦截对属性的读取和赋值操作,并在其中添加一些逻辑以实现响应式。Proxy是ES6引入的一个特性,它可以拦截并自定义JavaScript对象的操作。Vue 3利用Proxy来监听对象的属性访问和修改,从而实现了响应式的数据绑定。当你修改Vue实例中的数据时,Proxy会捕获到这个变化,并触发相应的更新操作,使得页面能够及时地响应数据的变化。

但是,当我直接将新的数组赋值给arr.value时,Vue 无法拦截到这个操作,因为这实际上是直接改变了arr.value这个对象引用指向的地址,而不是改变了这个对象的某个属性。Vue 只能监测到通过arr.value获取的值的变化,而无法监测到arr.value本身的变化。

3.一种解决办法

使用展开操作符: arr.value = [...data];

使用展开操作符[...data]创建了一个新的数组实例,然后将这个新数组实例赋值给了arr.value,这样就相当于给arr.value这个对象添加了一个新的属性,并且 Vue 可以检测到这个属性的变化,从而触发页面重新渲染。

希望这能帮到您!笔者水平有限,如有错误,还望指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值