Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React redux从列表中删除多个对象_Redux_React Redux - Fatal编程技术网

React redux从列表中删除多个对象

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) } })

我刚开始用react redux,到目前为止我很喜欢它。从数组中删除与groupid匹配的所有对象时出现问题

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分钟内接受你的回答,因为它不允许我马上回答:)谢谢!不要着急,可能会有更聪明的答案:)