不可变的从 Map | 中的所有元素的数组中删除项目Redux 状态

Immutable remove item from array from all elements in Map | Redux state

我在从我的 Redux 状态下映射中的每个元素的数组中删除项目时遇到一些问题。

使用以下结构

entities: {
 brands: (Map) {
   first: {
     ...props,
     strategists: [
       '1', '2'
     ]
   },
   second: {
     ...props,
     strategists: [
       '1', '2'
     ]
   }, ..
 }
}

这是我能做的最好的了:

const newBrands = state
      .get('brands')
      .map(brand => brand.updateIn(['strategists'], strategists => strategists.filter(s => s !== id)))

return state.set(['brands'], newBrands)

我没有加起来,我也无法在网上找到它。

谢谢

我以前没有使用过 Immutable.js,但我试过你的代码示例,直到最后一行,一切似乎都按预期工作,你正在使用 state.set(['brands'], newBrands) 设置状态state.set('brands', newBrands); 这可能是问题所在吗?否则唯一的变化是我假设 firstsecond 也应该是 Maps,所以如果你在那之前遇到错误,也许这也是问题的一部分。

为了以防万一,我包含了代码:

const state = Immutable.Map({});
const original = Immutable.Map({
  first: Immutable.Map({
     someProp: 'someValue1',
     strategists: [
       '1', '2', '3'
     ]
   }),
   second: Immutable.Map({
     someProp: 'someValue2',
     strategists: [
       '1', '2', '3'
     ]
   })
});

const id ='2';

const brands = original
  .map(brand => 
    brand.updateIn(['strategists'], strategists => 
      strategists.filter(s => s !== id)
    )
  );

const newState = state.set('brands', brands);
console.log(
  newState.get('brands')
    .toString()
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>