在vue中修改数组某个元素,值变了,渲染不了

描述:在vue的data属性中,定义了一个数组,然后这个数组需要在html中渲染,你需要在watch属性中修改了某个值,在html中显示。

问题:为什么渲染不了?

:跟vue的响应式原理有关(我瞎说的)

解决方案:

方法一:(推荐)

用this.$forceUpdate()强制刷新,官方文档定义:迫使组件实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件

export default {
    data(){
        return {
            arr:['张三','李四','王五','赵六']
        }
    }
    
    watch: {
        arr:{
            immediate:true
            deep:true
            handler(v) {
                this.arr[0] = '熊二'
                this.$forceUpdate()//如果修改data中数组(根据下标)的某个值,要强制刷新
            }
        }
    }
}

方法二:(推荐)

用$set()方法,一参是数组,二参是下标,三参是值

export default {
    data(){
        return {
            arr:['张三','李四','王五','赵六']
        }
    }
    
    watch: {
        arr:{
            immediate:true
            deep:true
            handler(v) {
                this.$set(this.arr, 0, '熊二')
            }
        }
    }
}

方法三:(不推荐)

直接换掉整个数组

2021/11/11更新

重点

this.$forceUpdate()与this.$set()的区别?

this.$forceUpdate()强制性刷新dom(全局)性能消耗高,触发updated生命周期

this.$set()对数组和对象赋值,并监听,指定性刷新,性能消耗低

踩坑:套入多个循环后,用this.$forceUpdate()刷新不了,用this.$set()就可以刷新,咱啥也不懂,啥也不敢问

PS:vue中的watch属性具体怎么用,传送门

vue的watch:{}属性用法handler(v){},immediate,deep_是泡沫呀的博客-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值