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

时间:2017-09-17 15:25:49

标签: redux immutability

我在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)

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

谢谢

1 个答案:

答案 0 :(得分:1)

之前我没有使用过Immutable.js,但我玩了你的代码示例,所有内容似乎都按预期工作,直到最后一行,你使用state.set(['brands'], newBrands)而不是{{1这可能是问题吗?否则唯一的变化就是我假设state.set('brands', newBrands);first也应该是second s,所以如果你之前遇到错误,也许这也是问题的一部分。

我包含代码以防万一:

Map
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()
);