如何使用Redux在reducer中修改子对象

bbuxkriu  于 2023-05-29  发布在  其他
关注(0)|答案(2)|浏览(130)

我有一个状态,里面有多个对象。现在我可以修改第一层的所有元素,比如 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
  }
};

使用循环可以吗?我试过用Map或foreach,没有工作。我还尝试在spread操作符中调用property,类似于以下内容:

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

但是它给了我一个语法错误。
如果有必要,我还可以修改有效载荷。
你知道吗?

7rfyedvj

7rfyedvj1#

你可以试试这样的
return { ...state,user : {...state.user ,identification :action.payload }}

eivnm1vs

eivnm1vs2#

如果你行动有效载荷是

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

你必须覆盖标识属性

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

相关问题