如何在reducer中使用以前的状态属性

时间:2019-03-27 09:49:24

标签: reactjs redux

我想从我的商店中增加adult对象的passenger属性

const store = {
//...
passenger: {
    adult: 1,
    child: 0
  }
///...
}

我的减速器中有

if (action.type === actionTypes.ADD_ADULT) {
    return {
      ...state,
      adult: state.passenger.adult + 1
    };
  }

但是我当然会犯一个错误“无法读取未定义的属性'adult'”,因为Redux官方文档说 Redux会首次调用具有未定义状态的reducer 。有没有办法使用以前的状态,还是应该通过adult传递新的action.payload值?

P.S .:如果正在使用combineReducerspreloadedState,我会使用它。

1 个答案:

答案 0 :(得分:3)

您可以创建一个initialState对象,将其用作状态的默认值,以便state.adult拥有一个值。

示例

const initialState = {
  adult: 0,
  child: 0
};
function reducer(state = initialState, action) {
  if (action.type === actionTypes.ADD_ADULT) {
    return {
      ...state,
      adult: state.adult + 1
    };
  }

  // ...

  else {
    return state;
  }
}