// note - findIndex might be replaced with some(), filter(), forEach()
// or any other function/approach if you need
// additional browser support, or you might use a polyfill
const index = this.values.findIndex(item => {
return (replacementItem.id === item.id)
})
this.values.splice(index, 1, replacementItem)
5条答案
按热度按时间ws51t4hk1#
编辑2
Vue.set(object, prop, value)
编辑1
对于vuex,您将需要执行
Vue.set(state.object, key, value)
原件
所以对于其他提出这个问题的人来说。它在Vue 2中的某个时候出现过。* 他们删除了
this.items.$set(index, val)
而支持this.$set(this.items, index, val)
。剪接仍然是可用的,这里是一个链接到数组突变方法可在vue链接。
w51jfk4q2#
如果您像这样操作数组,VueJS无法拾取对状态的更改。
正如Common Beginner Gotchas中所解释的,应该使用数组方法,如push、splice或其他方法,并且永远不要像
a[2] = 2
这样修改索引,也不要修改数组的. length属性。ndh0cuux3#
如前所述-VueJS不能简单地跟踪那些操作(数组元素赋值)。VueJS使用数组跟踪的所有操作都在这里。但我会再复制一次:
在开发过程中,您会面临一个问题--如何接受它:)。
push()、pop()、shift()、unshift()、sort()和reverse()非常简单,在某些情况下会有所帮助,但主要的焦点在于splice(),它允许您有效地修改VueJ跟踪的数组。因此,我可以分享一些处理数组最常用的方法。
注意:如果您只需要修改项目字段,您可以通过以下方式进行修改:
这将由VueJS跟踪,因为项目(对象)字段将被跟踪。
实际上,你可以用这个函数做更多的事情,你可以添加多个记录,删除多个记录,等等。
Vue. set()和Vue. delete()可用于向UI版本的数据添加字段。例如,您需要在对象中添加一些额外的计算数据或标志。您可以为对象或对象列表(在循环中)执行此操作:
并将编辑后的数据以相同格式发送回后端,在Axios调用之前执行此操作:
7hiiyaii4#
另一种更轻量级的解决方法是,临时编辑数组,然后将整个数组赋回变量。因为Vue不监视单个项,它将监视整个变量的更新。
所以你应该也能做到:
这也应该更新您的DOM。
iibxawm45#
在此处观察对象和阵列React性:
https://v2.vuejs.org/v2/guide/reactivity.html