在vue.js中,更新整个观察数组并触发重新渲染的最佳方式是什么?而无需迭代和推送所有项目?我已经阅读了此处的文档:https://v2.vuejs.org/v2/guide/list.html#Replacing-an-Array,但是对我来说,使用过滤、连接或切片来更新数组没有意义。有些地方我可能遗漏了吗?
将初始数组长度设置为0,然后将它们合并在一起:
oldArr.length = 0
oldArr.concat(newArr)
如果你想替换整个数组并创建一个新的响应式数组,最简单的方法是使用受支持的数组操作方法之一,例如.concat()
:
this.newArray = this.oldArray.concat()
this.newArray = this.oldArray
会将响应式从一个数组克隆到另一个数组,因此对 this.oldArray
的更改也会反映在 this.newArray
上,这通常不是您想要实现的行为。data:
块中定义了一个数组,如下所示: data: {
event: { name: '', description: '', date: '' },
events: []
}
要设置整个数组(在这些示例中,为本地数组 var localEvents
),这两种方法都可以正常工作,并且第二种方法具有更多的灵活性:
this.events = localEvents; // assigns array, is reactive
this.events = localEvents.slice(0, localEvents.length); // assigns array, is reactive
this.set$("events", localEvents)
Cannot set reactive property on undefined, null, or primitive value: events
说明: https://v2.vuejs.org/v2/guide/migration.html#Array-prototype-set-removed
然而,Vue.set
可以用于对数组进行响应式元素添加。 因此,对于一个长度为3的数组:
Vue.set(this.events, 4, newEvent); // adds newEvent to array reactively
this.events.splice(4, 1, newEvent); // also adds newEvent to array reactively
newEvent
)替换。
oldArr = newArr
? - choasia