我尝试的第一件事是:
const initialState = {
items: {},
showCart: false,
showCheckout: false,
userID: null
};
export default function reducer(state=Immutable.fromJS(initialState), action) {
case 'REMOVE_FROM_CART':
return state.deleteIn(['items', String(action.id)]);
}
当游戏机在上方记录Deletein时,它实际上确实正确地从地图上删除了该项目。但是,该应用不会再次重新渲染,因为我认为我正在突变状态(?(。(MapStateToprops被调用,但没有新状态(。
所以接下来我尝试了:
case 'REMOVE_FROM_CART':
const removed = state.deleteIn(['items', String(action.id)]);
const removeItemState = {
...state,
items: { removed }
}
return state.mergeDeep(removeItemState);
,但我只是将已删除的项目添加到项目中,从而创建重复。
我该如何处理?
您深深克隆了状态后是否尝试过删除该物品?
case 'REMOVE_FROM_CART':
const removeItemState = {
...state
items: {
...state.items
}
};
delete removeItemState.items[String(action.id)];
return removeItemState;
减少怎么样?
case 'REMOVE_FROM_CART':
return {
...state,
items: Object.keys(state.items).reduce((acc, curr) => {
if (curr !== action.id) acc[curr] = state.items[curr];
return acc;
}, {})
};
发布更多代码(例如我的还原器设置( May 有所帮助,但这是发生的事情:
首先,此代码是从状态中删除该项目的正确方法。
return state.deleteIn(['items', String(action.id)]);
但是,由于我使用的是immutable
库而不是redux-immutable
,因此我的组合库是无法正确处理我的状态。这允许我做诸如state.cart.items
(在Mapstatetoprops中(之类的事情,我真的应该使用state.getIn(['cart', 'items'])
。
更改它使删除工作。
感谢反应式的@jslatts不变的Slack渠道,以帮助您解决这个问题!