如何在Reduce的reducer中根据您的状态修改子对象

时间:2019-03-15 12:21:51

标签: javascript reactjs ecmascript-6 redux state

我有一个状态,里面有多个对象。现在,我可以修改第一级中的所有元素,例如 step 属性。但是我想知道如何在状态内部修改对象中的元素。

初始状态

const initialState = {
  step : 1,
  user: {
    identification : {
      email:  '',
      username: '',
    },
    localization: {
      address:  '',
      country: '',
    }}

我的有效载荷是这个对象:

identification : {
    email: "some@html.com"
    username: "s032190" }

我的 rootReducer 是这样:

function rootReducer(state = initialState, action) {
  switch (action.type) {
    case ADD_USER:
      return { ...state, user: action.payload }  
    case CHANGE_STEP:
    return { ...state, step: action.payload }  
    case ADD_FIELD: 
      Object.keys(state.altaUsuario).forEach (cat => { 
          return { ...state.user, [cat] : action.payload}          
      })
    default:
    return state
  }
};

使用循环好吗?我尝试了地图或foreach,但没有任何效果。 我还尝试在传播操作符中调用属性,如下所示:

       return { ...state, altaUsuario[cat] : action.payload}     

但是它给了我一个语法错误。

如有必要,我还可以修改有效负载。

有什么主意吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情

return { ...state,user : {...state.user ,identification :action.payload }}

答案 1 :(得分:0)

如果您的action.payload为

{
  identification : {
  email: "some@html.com"
  username: "s032190"
   }
}

您必须覆盖标识属性

return { ...state, user: { ...state.user, identification: action.payload.identification}