在redux存储中使用combineReducers重置嵌套的isDirty状态?

时间:2017-07-13 08:38:32

标签: reactjs redux react-redux

因此,在我的商店中,每个fruitId我有多个状态,每个fruitId都有一个isDirty状态。然后,我有RESET_DIRTYfruitId两项操作,RESET_ALL。以下代码有效。但我想我想知道是否有办法用combineReducers做到这一点,以便我可以清理这种模式?

我的商店现在看起来像这样,我想知道如何

function fruits(state = {}, action) {
  return { 
    isDirty: isDirty(state.isDirty, action)
  }
}

function isDirty(state = false, action) {
  switch (action.type) {
    case ActionTypes.RESET_DIRTY:
      return false;
    default:
      return state;
  }
}

export default function fruitStore(state = {}, action) {
  if (!action.type.startsWith('fruits')) {
    return state;
  }

  const { fruitId } = action;
  const { currentFruit } = fruitId ? { 
    [fruitId] : fruits(state[fruitId], action) 
  } : {};

  let newState = Object.assign({}, state, currentFruit);

  switch (action.type) {
    case ActionTypes.RESET_DIRTY_ALL:
      newState = Object.assign({}, newState);

      Object.keys(newState).forEach((key) => {
        newState[key].isDirty = false;
      });

      return newState;
    default:
      return newState;
  }   
}

1 个答案:

答案 0 :(得分:0)

清理Redux有很多很棒的模式,但使用 Ducks 是我最喜欢的。 Github上的这个repo为您提供了如何以这种方式构建文件的简要说明:

Github: Modular Redux Ducks