关于Redux:如何更改数组中布尔值的状态?

时间:2019-04-13 03:47:37

标签: javascript reactjs ecmascript-6 redux react-redux

通常我在Reducer上看到这样的东西:

const initialState = {
  thisIsBoolean: false,
};

const handlers = {
  [ActionTypes.CARD_SELECTED](state, action) {
    return {
      ...state,
      thisIsBoolean: !state.thisIsBoolean,
    };
  },
};

export default createReducer(initialState, handlers);

操作:

export const booleanExample = () => ({
  type: ActionTypes.CARD_SELECTED,
});

但是我现在需要做这样的事情: 减速器:

const initialState = {
  stepOneCardSelected: [
    { index: 0, isDone: false },
    { index: 1, isDone: false },
    { index: 2, isDone: false },
    { index: 3, isDone: false },
  ],
};

const handlers = {
  [ActionTypes.CARD_SELECTED](state, action) {
    return {
      ...state,
      stepOneCardSelected: action.payload.stepOneCardSelected,
    };
  },
}

操作:

export const stepOneCardSelectedAction = stepOneCardSelected => ({
  type: ActionTypes.CARD_SELECTED,
  payload: { stepOneCardSelected },
});

所以我需要做一些事情来返回状态并切换isDone中的stepOneCardSelected属性。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以在状态下遍历selectedCard并切换isDone

const initialState = {
  stepOneCardSelected: [
    { index: 0, isDone: false },
    { index: 1, isDone: false },
    { index: 2, isDone: false },
    { index: 3, isDone: false },
  ],
};

const handlers = {
  [ActionTypes.CARD_SELECTED](state, action) {
    return {
      ...state,
      stepOneCardSelected: state.stepOneCardSelected.map(({index,isDone})=>({index,isDone: !isDone}))
    };
  },
}