删除不突变状态的项目



我尝试的第一件事是:

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渠道,以帮助您解决这个问题!

最新更新