Как я могу обновить только часть состояния - PullRequest
2 голосов
/ 05 ноября 2019

Вот объект State:

const initialState = {
  data: {
    user: '',
    token: '',
  }
}

Редуктор:

case 'DO_SOMETHING':
return {...state, data: action.payload }

Если я выполню мягкое копирование состояния, как показано выше, я перезаписываю всю data частьгосударство. Как я могу обновить только пользователя с данной полезной нагрузкой без перезаписи token?

Ответы [ 3 ]

4 голосов
/ 05 ноября 2019

Если полезная нагрузка всего лишь user, просто используйте тот же шаблон деструктурирования, который вы использовали для объекта state в целом:

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

Этот шаблон может быть вложен сколько угодноТаким образом, вы можете иметь большие объекты структурированного состояния и просто передавать нужные поля в полезные данные.

3 голосов
/ 05 ноября 2019

Попробуйте, (учитывая, что action.payload - весь объект данных)

case 'DO_SOMETHING':
return {...state, data: { ...state.data, user: action.payload.user } }
2 голосов
/ 05 ноября 2019

Разложите вложенный объект тоже:

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