Странное поведение с действием Redux и редуктором при создании действия для изменения ключей в состоянии - PullRequest
0 голосов
/ 10 января 2020

Мои извинения за заголовок.

В любом случае, я вижу странное поведение в моем Redux Dev Tool, когда я создаю определенный тип действия. Единственный способ показать, что я имею в виду, это на примере.

Допустим, у меня есть состояние с такой структурой:

const INITIAL_STATE = {
isFile: false,
isUploaded: false,
isUser: true
};

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

Таким образом, редуктор становится:

const CHANGE_KEY = "CHANGE_KEY";

export default (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case CHANGE_KEY:
      return {
        ...state,
        [action.payload.key]: action.payload.value,
      };
    default:
      return state;
  }
};

const changeKeyInState = (key, value) => ({ type: CHANGE_KEY, payload: { key, value } });

Теперь все это работает , Поэтому я могу вызвать одно действие, чтобы изменить простые пары ключ-значение в состоянии. Однако, допустим, у меня есть разные редукторы, которые обрабатывают различные области состояния с помощью своего собственного действия по смене ключа. Когда я смотрю на инструменты Redux Dev, он показывает ключи, добавленные в состояния, которых там быть не должно, что не имеет смысла. Например, если у меня был редуктор для входа в систему, действие которого изменяет ключ isLoggedIn, этот ключ также добавляется к вышеуказанному редуктору, что не имеет никакого смысла.

Вот код для другого редуктора:

const CHANGE_LOGIN_KEY = "CHANGE_LOGIN_KEY";

export default (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case CHANGE_LOGIN_KEY:
      return {
        ...state,
        [action.payload.key]: action.payload.value,
      };
    default:
      return state;
  }
};

const changeKeyInLoginState = (key, value) => ({ type: CHANGE_LOGIN_KEY, payload: { key, value } });

Я вижу это только в инструментах Redux Dev. Я не знаю, что происходит. Может кто-нибудь помочь мне разобраться в чем проблема?

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