vue 中 data 发⽣变化,视图不更新如何解决?

本文探讨了在 Vue2 中遇到数据变化但视图未更新的问题,原因是新增属性不是响应式的。解决方案包括使用 `this.$set` 方法来确保数据变化能被 Vue 检测到。此外,对于数组的更新,推荐使用如 push(), pop(), splice() 等内置方法以触发视图更新。避免直接修改数组项或长度,而是采用 Vue 提供的变异方法或 `$set` 方法。" 121163942,11600632,使用pytest进行接口自动化测试实践,"['自动化', '运维', 'Python测试框架']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、data 发⽣变化,视图不更新的原因

在 vue2 中 vue 实例的 data 数据是响应式 的(就是数据变了 视图也会跟着变),⽽我们新增的属性并不是响应式的,由于受现在JS的限制,Vue⽆法检测到属性的新增或删除。所以有时⽆法实时的更新到视图上。


二、解决视图不更新的方法

在项⽬中遇到这类问题的时候⼀般是通过 this. 方法去解决 $set⽅法⼀共有三个参数,分别是:
⽬前属性,新增属性,新增的值.

三、

1.数组更新检测

数组有一些方法可以导致视图更新,

  1. push()
  2. pop()
  3. shift()
  4. unshift()
  5. splice()
  6. sort()
  7. reverse()

替换数组: 例如:filter(), concat() 和 slice() ,这些不会改变原数组,但会返回一个新数组,可以用新数组替换旧数组。
(即:用一个含有相同元素的数组去替换原来的数组是非常高效的操作。)


2.注意

由于 JS 的限制,Vue 不能检测以下变动的数组:

  1. 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
  2. 当你修改数组的长度时,例如:vm.items.length = newLength
var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

为了解决问题:

  1. 以下方式可以实现与 vm.items[indexOfItem] = newValue 相同的效果,也会触发状态更新:
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)
  1. 可以使用 vm.$set 实例方法,它是全局方法 Vue.set 的一个别名:
vm.$set(vm.items, indexOfItem, newValue)
  1. 可以使用 splice
vm.items.splice(newLength)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值