vue.js 数据改变,但视图没更新

本文介绍了Vue.js中五种处理数据更新并确保视图同步的方法:静默刷新利用v-if,Vue.$set实现响应式,$forceUpdate强制更新,Object.assign利用新对象替换,以及splice针对数组的高效更新。
摘要由CSDN通过智能技术生成

一、解决方法1:静默刷新(使用v-if的特性)

在修改值之后将元素销毁,然后在修改后的下一次DOM渲染完成时再显示出来,这样就会触发组件重新加载data的数据进行渲染,data中被修改的数据才是最新的。

change(){
    this.info = {b:99}
    this.show = false
    this.$nextTick(()=>{
        this.show = true
    })
}

二、解决方法2:Vue.$set(官方推荐)

使用这个api修改的数据会为其添加响应式getter和setter让其拥有数据响应的特性,vm.$set(要操作的对象或数组, 要新增或者修改的数组或对象key, 对应的值)

updateName(){ 
    this.$set('userInfo',name,'小红'); 
}

三、解决方法3: Vue.$forceUpdate(手动强制更新视图)

因为Vue修改数据是异步执行的,所以视图不会立即更新,会等到下一次dom更新循环结束后统一更新发生在这一次循环中修改的数据,然后同步视图更新,所以我们可以修改后自己手动强制更新视图。

updateName(){
    this.userInfo.name='小红'//在此时,确实已经将userInfo对象修改完成
    console.log(this.userInfo.name);//输出结果: 小红
    this.$forceUpdate();//在这里,强制刷新之后,页面的结果变为'小红'
  }

四、解决方法4:Object.assign(使用修改栈能触发视图更新的特性)

我们都知道Object.assign能拷贝合成一个新对象,所以我们只需要将要修改的值合并成一个新对象然后赋值给data中的对象或数组,这样栈的指向被修改了.触发视图更新

五、解决方法5:对于数组还可以使用splice方法

(Vue对于数组的操作能识别变化的api包括push()、pop()、shift()、unshift()、splice()、sort()、reverse()这些都可被vue监测到)

一般使用都比较推荐使用$set的方式进行更改数据更新视图

this.setData({
  List:[...this.data.List,...res.data]
})

参考链接:https://juejin.cn/post/7204998680066752570

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值