vue2中不支持通过数组下标更改数组的值,无法做到响应式,页面没有重新渲染

首先直接看图:data中有一个persons数组,现在想修改第一条数据

methods: {
    updateMei(){
        // this.persons[0].name = '马老师' //奏效
        // this.persons[0].age = 50 //奏效
        // this.persons[0].sex = '男' //奏效
        this.persons[0] = {id:'001',name:'马老师',age:50,sex:'男'} //不奏效
        // this.persons.splice(0,1,{id:'001',name:'马老师',age:50,sex:'男'}) // 奏效
    }
}

上述代码中,this.persons[0] = {id:'001',name:'马老师',age:50,sex:'男'} 这行代码是不奏效的,虽然修改了data中的数据,但是页面中模版并没有更新。

 为什么?尤大给出的解释是:基于性能问题的考虑。

 Vue2的官方文档也写了,数组更新检测,只有下面7种方法被vue重写过的,主要做两个操作:1、先调用Array原型上对应的方法。2、重新解析模版,生成虚拟DOM

 也就是说,通过 this.persons[0] = {id:'001',name:'马老师',age:50,sex:'男'} 这种直接修改数组下标的方式,vue底层是不会重新解析模版,更新视图的。 

但是为什么通过数组下标.属性名 this.persons[0].name,这种修改的方式可以更新视图呢? 主要是因为数组中对象的属性都被添加了getter/setter

 综上所述:在Vue修改数组中的某个元素一定要用如下方法:

        

        1.使用这些API:push()、pop()、shift()、unshift()、splice()、sort()、reverse()

        2.Vue.set() 或 vm.$set()

也可以根据实际场景,使用filter、map等方法,对数据过滤处理后,重新赋值,也可以达到更新视图的目的 :

除了通过数组下标的这种修改,此外还要注意的是:通过数组.length修改数组的长度,也不会触发页面的更新 :

 如果帮助到您了,可以留下一个赞👍告诉我 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿小野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值