加载中...

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


问题

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

原因

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

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

解决方法(一)

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

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


文章作者: LYF
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LYF !
评论
  目录