首页 > 解决方案 > 如何在减速器中使用先前的状态属性

问题描述

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

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

在我的减速机中,我有

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

但是我当然会得到一个错误“Cannot read property 'adult' of undefined”,因为官方 Redux 文档说Redux 将首次调用具有未定义状态的 reducer。有没有办法使用以前的状态,或者我应该只传递一个新值adultthrough action.payload

PS:我正在使用combineReducersand preloadedState,如果它以某种方式影响。

标签: reactjsredux

解决方案


您可以创建一个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;
  }
}

推荐阅读