React redux从列表中删除多个对象
我刚开始用react redux,到目前为止我很喜欢它。从数组中删除与groupid匹配的所有对象时出现问题React redux从列表中删除多个对象,redux,react-redux,Redux,React Redux,我刚开始用react redux,到目前为止我很喜欢它。从数组中删除与groupid匹配的所有对象时出现问题 deleteManyProducts: (state, action) => { state.list.map((val, i)=>{ if(val.groupid === action.payload.groupid) { state.list.splice(i,1) } })
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)
}
但是,当我在其余对象上再次分派相同的操作时,它只会删除我选择要删除的对象。我不明白它为什么会这样。filter()或map()方法-创建一个新数组
所以你可以做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;
}
filter()或map()方法-创建一个新数组
所以你可以做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
。在这种情况下,这不是正确的使用方法。尝试以下方法:
const list = state.list.filter(val => val.groupid !== action.payload.groupid);
state.list = [...list];
filter
&map
都返回新数组,即使您正在原始数组上使用splice
。在这种情况下,这不是正确的使用方法。谢谢,这非常有效。我会在10分钟内接受你的回答,因为它不允许我马上回答:)谢谢!不要着急,可能会有更聪明的答案:)谢谢,这很有效。我会在10分钟内接受你的回答,因为它不允许我马上回答:)谢谢!不要着急,可能会有更聪明的答案:)