不可变的从 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);
这可能是问题所在吗?否则唯一的变化是我假设 first
和 second
也应该是 Map
s,所以如果你在那之前遇到错误,也许这也是问题的一部分。
为了以防万一,我包含了代码:
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>
我在从我的 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);
这可能是问题所在吗?否则唯一的变化是我假设 first
和 second
也应该是 Map
s,所以如果你在那之前遇到错误,也许这也是问题的一部分。
为了以防万一,我包含了代码:
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>