Переинициализируется ли состояние в исходное состояние каждый раз, когда действие отправляется в реакции с использованием избыточности? - PullRequest
0 голосов
/ 06 февраля 2020

Например, в приведенном ниже коде (ПРИМЕЧАНИЕ: ничего особенного в этом коде, просто служит примером):

 const INITIAL_STATE = {
  hidden: true,
  cartItems: []
};

const cartReducer = (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case CartActionTypes.TOGGLE_CART_HIDDEN:
      return {
        ...state,
        hidden: !state.hidden
      };
    case CartActionTypes.ADD_ITEM:
      return {
        ...state,
        cartItems: addItemToCart(state.cartItems, action.payload)
      };
    case CartActionTypes.REMOVE_ITEM:
      return {
        ...state,
        cartItems: removeItemFromCart(state.cartItems, action.payload)
      };
    case CartActionTypes.CLEAR_ITEM_FROM_CART:
      return {
        ...state,
        cartItems: state.cartItems.filter(
          cartItem => cartItem.id !== action.payload.id
        )
      };
    default:
      return state;
  }
};

Q1: возвращает ли состояние обратно к INITIAL_STATE, то есть,

{
  hidden: true,
  cartItems: []
};

каждый раз, когда действие отправляется на этот редуктор?

Q2: Значит, состояние в комбайне-редукторе также будет повторно инициализировано до исходного состояния, скажем, состояние по умолчанию возвращается в редуктор? или, говоря иначе: Q3: состояние в комбайн-редукторе, соответствующее конкретному редуктору, продолжает переинициализироваться / устанавливаться в состояние, определенное самым последним отправленным действием, например, в приведенном выше коде, если CartActionTypes.ADD_ITEM является последней отправленной действие для редуктора

 case CartActionTypes.ADD_ITEM:
      return {
        ...state,
        cartItems: addItemToCart(state.cartItems, action.payload)
      };

, тогда состояние в combreducer будет (на основе описанного выше случая):

{
  hidden: true,
  cartItems: addItemToCart(state.cartItems, action.payload)
};

и hidden будет повторно установлено в true независимо от значения, которое может были в состоянии из-за ранее отправленных действий? Таким образом, в основном последнее отправленное действие решает, какие текущие значения состояния будут изменены независимо от отправленных предыдущих действий, и значения состояния, не измененные последней диспетчеризацией, возвращаются в исходное состояние?

В: Если я прав в моем понимании тогда не будут ли различные компоненты в реакции, вызывающие значения состояния (например, с помощью mapStatetoProps), иметь доступ только к значениям состояния, определенным последней отправкой?

1 Ответ

0 голосов
/ 06 февраля 2020

Когда вы отправляете действие, оно будет отправлено редуктору для вычисления следующего состояния на основе отправленных CURRENT STATE и ACTION .

Теперь ваш Функция cartReducer принимает 2 параметра, state и action. По сути, вы говорите функции редуктора, что если состояние не было предоставлено, используйте INITIAL_STATE. Поэтому, когда ваша функция-редуктор выполняется, она увидит, является ли значение состояния undefined. Если это так, то он будет использовать INITIAL_STATE, иначе он будет использовать предоставленное значение состояния, которое является вашим текущим состоянием.

Вы можете узнать больше о параметрах по умолчанию в JavaScript здесь . Вы можете go руководствоваться принципами избыточного ядра здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...