2017-05-31 147 views
0

删除项目没有不同诱变国家我想的第一件事情是这样的:在终极版

​​

当控制台记录deleteIn以上,但它实际上是从地图正确删除的项目。然而,该应用程序不会再次重新渲染,因为我假设我正在改变状态(?)。 (mapStateToProps被调用,但没有新的状态)。

所以下次我尝试这样做:

case 'REMOVE_FROM_CART': 
    const removed = state.deleteIn(['items', String(action.id)]); 
    const removeItemState = { 
    ...state, 
    items: { removed } 
    } 
    return state.mergeDeep(removeItemState); 

但我只是将已删除项目的项目再次创建一个重复。

我该如何处理?

回答

0

发布更多的代码(如我的减速设置)已经帮助了,但这里发生了什么事情:

首先,这段代码是从状态删除的项的正确方法。

return state.deleteIn(['items', String(action.id)]); 

但是,因为我用的是immutable库和我combineReducers不redux-immutable,我的状态没有正确被处理。这让我可以做像state.cart.items(在mapStateToProps),我真的应该使用state.getIn(['cart', 'items'])

更改,神奇地做了删除工作。

感谢Reactiflux Immutable Slack频道中的@jslatts以帮助解决这个问题!

0

你有没有试过在你有deeply cloned状态后取出物品?

case 'REMOVE_FROM_CART': 
    const removeItemState = { 
     ...state 
     items: { 
      ...state.items 
     } 
    }; 

    delete removeItemState.items[String(action.id)]; 

    return removeItemState; 
0

如何减少?

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; 
    }, {}) 
    };