J'ai un état avec plusieurs objets à l'intérieur. Pour le moment, je peux modifier tous les éléments du premier niveau, comme la propriété step. Mais je veux savoir comment modifier les éléments d'un objet à l'intérieur de mon état.

État initial

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

Ma charge utile est cet objet :

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

Et mon rootReducer est le suivant :

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
  }
};

Est-ce bien d'utiliser une boucle? J'ai essayé avec la map ou le foreach, rien n'y fait. J'ai également essayé d'appeler la propriété dans l'opérateur spread, quelque chose comme ceci :

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

Mais cela me donne une erreur de syntaxe.

Je peux également modifier la charge utile si nécessaire.

Une idée??

1
ValRob 15 mars 2019 à 15:21

2 réponses

Meilleure réponse

Vous pouvez essayer quelque chose comme ça

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

2
Mohsin Amjad 15 mars 2019 à 12:45

Si votre action.payload est

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

Vous devez remplacer la propriété d'identification

return { ...state, user: { ...state.user, identification: action.payload.identification} 
0
Ashish Jhanwar 15 mars 2019 à 13:03