vue解决视图不更新常用方法

导致原因:
由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的
解决方法:

  1. this.$forceUpdate()用于强制组件重新渲染,即使没有响应式数据发生变化。通常情况下,Vue.js会自动跟踪数据的变化并进行重新渲染,但有时候您可能需要手动触发重新渲染,这时可以使用 方法。
    2.this.$nextTick(() => { }) 将回调延迟到下次 DOM 更新循环之后执行。
    3.this.$set
this.$set(对象, '要修改参数名', 修改的内容)
 例: this.obj = {
		    id:1  
      }  
  this.$set(this.obj, 'id', 2)  

4.Object.defineProperty() 可以监测数组的变化
Object.defineProperty() 可以监测数组的变化。但对数组新增一个属性(index)不会监测到数据变化,因为无法监测到新增数组的下标(index),删除一个属性(index)也是。

var arr = [1, 2, 3, 4]
arr.forEach(function(item, index) {
    Object.defineProperty(arr, index, {
    set: function(value) {
      console.log('触发 setter')
      item = value
    },
    get: function() {
      console.log('触发 getter')
      return item
    }
  })
})
arr[1] = '123'  // 触发 setter
arr[1]          // 触发 getter 返回值为 "123"
arr[5] = 5      // 不会触发 setter 和 getter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值