删除当前元素后 v-for 列表更新不正确
Posted
技术标签:
【中文标题】删除当前元素后 v-for 列表更新不正确【英文标题】:v-for list is updated incorrectly after removing current element 【发布时间】:2020-08-08 23:50:58 【问题描述】:请你帮帮我,我不知道如何处理。我有项目列表,其中每个项目都是一个组件,并且有自己的删除按钮。此按钮发出删除事件,将当前项目的键提交到 vuex 存储。因此,在我的 vuex 存储中,只发生了数组拼接。数组本身很好。但是 DOM 只显示最后一次删除 row ,而不是我点击。我在每个组件中都使用了 key,例如 vue documentation 。但我的代码仍然不起作用。 CentralPanel.vue(父)
div(v-for="(good,key) in goods" :key="key")
goodItem(:goodProps="good" :goodsLength="goods.length" @update-row="updateChildRow($event)" @delete-item="$store.commit('goods/delete_current_good',key)")
goodItem.vue(子)
// All above just inputs
v-btn(@click="$emit('delete-item')" style=marginTop:'13px')
v-icon mdi-trash-can-outline
商店
delete_current_good : (state,key) =>
let goodsArr = state.goodsArray;
goodsArr.splice(key,1);
【问题讨论】:
到目前为止您展示的内容应该可以工作。这意味着问题不在您到目前为止显示的代码中。请创建一个minimal reproducible example 以便其他人帮助您找到错误的根源。如果您需要基于多文件节点的环境,请使用 codesandbox.io(或类似的)。 我会告诉你谢谢! 【参考方案1】:我相信,这是由 v-for 中的错误键引起的。我看到您正在迭代一个数组(因为您使用了拼接)所以第二个参数不是key
- 它是index
。
Vue通过key的属性区分循环中的元素。当您使用索引作为键时,它无法很好地跟踪项目。将其更改为每个元素的唯一值,例如good.someUniqueAttribute
此案例有描述:Why not always use the index as the key in a vue.js for loop?
【讨论】:
哦,非常感谢!我使用 Date().getTime() 作为我在项目对象中的唯一属性现在可以了 :))以上是关于删除当前元素后 v-for 列表更新不正确的主要内容,如果未能解决你的问题,请参考以下文章
Vue使用v-for显示列表时,数组里的item数据更新,视图中列表不同步更新的解决方法
vue2购物车ch4-(筛选v-for 点击的那个设置样式 设为默认地址其他 联动 非循环的列表选中和非选中 删除当前选中的列表)