我刚开始使用react-redux,到目前为止,我很喜欢它。我有一个问题,无法从阵列中删除所有与组ID匹配的对象。
deleteManyProducts: (state, action) => {
state.list.map((val, i)=>{
if(val.groupid === action.payload.groupid) {
state.list.splice(i,1)
}
})
}
我首先用数组中的3个对象对其进行了测试,然后删除了前两个对象。比起我用4个对象测试它,它还删除了前两个对象,并删除了后两个对象。 最终,我测试了5个对象,并删除了前三个对象,最后两个删除了。
我检查了几次groupid匹配,并且它确实与我使用的所有对象都匹配。 我也尝试了这段代码,但是根本不起作用:
deleteManyProducts: (state, action) => {
state.list.filter(val=>val.groupid !== action.payload.groupid)
}
但是,当我对其余对象再次执行相同的操作时,它只会删除我选择要删除的对象。我不明白为什么会这样。
因此您可以state.list = state.list.filter(...)
但是在Redux中,您无法发送相同的状态...因此您应该使用浅拷贝或深拷贝。
deleteManyProducts: (state, action) => {
const copy = {...state};
copy.list = state.list.filter(val=>val.groupid !== action.payload.groupid);
return copy;
}
尝试这样的事情:
const list = state.list.filter(val => val.groupid !== action.payload.groupid);
state.list = [...list];
filter
和map
都返回新数组,即使您在原始数组上使用splice
也是如此。在这种情况下,这不是使用它们的正确方法。