我在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)
我并没有加起来,而且我也无法在网上找到它。
谢谢
答案 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()
);