美文网首页Vue
vue中数组(或对象)改变不会刷新实体

vue中数组(或对象)改变不会刷新实体

作者: Lia代码猪崽 | 来源:发表于2020-11-10 17:18 被阅读0次

一、原因

官方的原文:由于 JavaScript 的限制, Vue 不能检测以下变动的数组:
当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength

数组:Vue 中是通过对 每个键设置 getter/setter 来实现响应式的,开发者使用数组,目的往往是遍历,此时调用 getter 开销太大了,所以 Vue 不在数组每个键上设置,而是在数组上定义 ob ,并且替换了 push 等等能够影响原数组的原型方法。
vuedata里的数组的每一项在初始化时没有被设置gettersetter,所以不能监控利用索引直接设置一个项。

对象属性添加和删除:Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。

二、解决方法:

1、方案一:
// 对象
this.$set(this.object, key, value);
// 数组
this.$set(this.arr, index, newVal);
2、方案二:
// 对象:
this.obj = Object.assign({},this.obj,{"sex","man"});
// 数组: 
const newArr = this.arr;
arr[index] = newVal;
this.arr = Array.concat([], newArr);
3、方案三:
// 数组,使用被替换过的能影响原数组的原型方法
push()
pop()
shift()
unshift()
splice()  //注意长度会变化
sort()
reverse()

相关文章

  • vue中数组(或对象)改变不会刷新实体

    一、原因 官方的原文:由于 JavaScript 的限制, Vue 不能检测以下变动的数组:当你利用索引直接设置一...

  • Vue 数组相关

    1.如何对数组进行插入或删除splice Vue数组中存对象 关于绑定方法,方法里面传递对象数据 js中数组如何进...

  • Vue.set()和this.$set()应用的场景

    背景:在vue中改变对象的属性值或者通过索引改变数组时,对应修改的字段不会重新在页面渲染。 例如: 经过查看官方文...

  • vue实现监听多维数组和深度监听对象的方式

    使用vue的过程中,如果数组或对象发生了变化,vue是监听不到的,这里总结下对多维数组和多层对象的监听。 监听多维...

  • 关于watch监听数组的问题

    注意:在变异 (不是替换) 对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变...

  • vue 监听对象属性的变化

    在修改(不是替换)对象或数组时,旧值将与新值相同,因为它们索引同一个对象/数组。Vue 不会保留修改之前值的副本。...

  • Array.prototype.join()方法:

    join()方法将数组(或一个类数组对象)的所有元素连接到一个字符串中。PS: join()方法,不会改变数组! ...

  • vue中刷新数组

  • 记录一个Vue中改变循环遍历后的数据的坑

    问题背景 使用v-for遍历对象渲染数据,被渲染的数据改变时另一数据需要联动改变场景图 Vue中对数组和对象的改变...

  • vue.set()

    vue为了更加简洁,当data的数据是数组或者对象时,动态的添加或删除,视图将不会更新Vue.set()可以用来设...

网友评论

    本文标题:vue中数组(或对象)改变不会刷新实体

    本文链接:https://www.haomeiwen.com/subject/ksdrtktx.html