Vue中修改数组长度或数组内某个值时无法更新情况

本文介绍了在Vue中,为何直接赋值或设置数组长度无法触发页面刷新,并详细解释了数据劫持机制。重点讲解了使用Vue重写数组方法如`set`、`splice`来确保双向数据绑定。建议读者查阅官方文档解决此类问题。
摘要由CSDN通过智能技术生成


前言-Vue中改变了数据页面却不刷新

最近刚开始实习,导师给的任务很简单,做某个Table行数据的删除。在清空整个data数组时,用到了两种方法

this.formData = [] // 直接用一个空数组覆盖
this.formData.length = [] // 设置length为0进行清空

但是这两种方式都是无法触发Vue中的响应,在Vue的官方文档中也有解释,并且推荐了解决方案为:使用set方法或splice方法。


原因

因为vue实现双向数据绑定的机制是数据劫持,也就是在所有对象上有个Object.defineProperty()方法,通过监听set,get方法去实现,而数组没有这两个方法,所以就不会更新view。例如像数组的length熟悉是不能添加getter和setter,所有无法通过观察length来判断。

解决方案就是,需要我们主动通知vue。

翻阅Vue源码中的array.js(vue/src/core/observer/array.js)可以知道其重写了push、pop、shift、unshift、splice、sort、reverse这几个数组方法,只要我们使用这几个方法去操作数组,就会触发Vue中的数据响应,从而更新数组。


总结

如果某个数组数据需要双向绑定更新,那么每次操作时必须要用到上面提到的Vue中重写了的数组方法。
ps:多看看官方文档才是正解,很多问题搜不到或弄不懂,其实在官方文档里写的很清楚了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值