как изменить дочерний объект из вашего состояния в редукторе с помощью Redux - PullRequest
1 голос
/ 15 марта 2019

У меня есть состояние с несколькими объектами внутри. Прямо сейчас я могу изменить все элементы первого уровня, например, свойство 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 ]

2 голосов
/ 15 марта 2019

Вы можете попробовать что-то вроде этого

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

0 голосов
/ 15 марта 2019

если ваш action.payload равен

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

, вы должны переопределить свойство идентификации

return { ...state, user: { ...state.user, identification: action.payload.identification} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...