Компонент объекта доступа в редукторах состояния redux - PullRequest
0 голосов
/ 11 июля 2020

Я только начал изучать redux, и мне было интересно, как получить доступ к объектному компоненту в redux reducers. Я хочу получить доступ к компоненту address внутри пользователя, но не могу, потому что это ключ. Есть ли способ получить к нему доступ? Вот мой код:

const initialState = {
  token: localStorage.getItem('token'),
  user: {},
};

export default function (state = initialState, action) {
  const { type, payload } = action;
  case SET_SHIPPING_ADDRESS:
   return {
    ...state,
    state.user.addresses: payload, //how to access the addresses property from here?
   }
};

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Операция распространения "..." позволяет вам присвоить новое значение свойствам объекта. если одно из свойств является объектом, и вы хотите присвоить новое значение одному из его свойств, вам необходимо также распространить его и т. д.

Например:

export default function (state = initialState, action) {
  const { type, payload } = action;
  case SET_SHIPPING_ADDRESS:
   return {
    ...state, 
    user: { 
      ...state.user, 
       addresses: payload
    }
  }
};
1 голос
/ 11 июля 2020

У вас есть свойство user в исходном состоянии, но затем вы пытаетесь назначить другое свойство state.user.buyer.addresses, что неверно, потому что на самом деле вы хотите обновить addresses внутри объекта user.

Простым и быстрым способом глубокого клонирования объекта user было бы преобразовать его в строку, а затем проанализировать.

const clone = JSON.parse(JSON.stringify(state.user));

, тогда вы можете назначить новые адреса

clone.buyer.addresses = payload.addresses

Наконец обновите свое состояние с помощью нового user объекта

  case SET_SHIPPING_ADDRESS:
   return {
    ...state,
     user: clone
   }
...