Как я могу создать селектор редукции для состояния, которого еще не существует

Я нахожу способ обойти эхосистему Redux и столкнулся со следующей ситуацией: предположим, у меня есть компонент React, который должен быть подключен к части состояния redux с помощью селектора, но эта часть еще не существует (не определено). Итак, при запуске я получаю сообщение об ошибке «получить неопределенное значение». Можно ли как-то определить и подключить селектор к компоненту, хотя части состояния еще не существует?

Я использую повторный выбор для создания селектора, это обходной путь, который я использовал, чтобы избежать ошибки:

import { createSelector } from 'reselect';

const selectLogin = (state) => state

const loginDataSelector = () => createSelector(
  selectLogin,
  (authState) => authState.get("auth")?
   authState.get("auth").get('loginData'):undefined
);

export {
  loginDataSelector
};

Таким образом, селектор selectLogin, похоже, отслеживает все дерево состояний. Есть ли лучший способ сделать это или есть ли наилучшая практика для селекторов с неопределенной (= еще не установленной) частью состояния?


person Matt Clouds    schedule 27.07.2017    source источник
comment
что, если вы изначально установите для этой части состояния какое-то значение по умолчанию?   -  person Balázs Édes    schedule 27.07.2017
comment
Это означает, что я должен использовать редюсер для этой части состояния, верно? Мне это кажется слишком много, так как мне нужно только прочитать часть состояния, а не записать ее (из этого компонента). Кроме того, в другом компоненте есть редьюсер для этой части состояния, просто он еще не был вызван. Возникает связанный с этим вопрос: есть ли способ подключить уже существующий компонент к части состояния ПОСЛЕ того, как он был инициализирован/отрендерен и т. д. Это позволит избежать проблемы несуществующего состояния.   -  person Matt Clouds    schedule 27.07.2017


Ответы (1)


Вы можете использовать значения по умолчанию ES6, чтобы обойти эту проблему.

Также нельзя использовать getIn, который позволяет безопасно обращаться к глубинным свойствам.

import { createSelector } from 'reselect';
import { Map } from 'immutable';

const selectLogin = (state) => state

const loginDataSelector = createSelector(
  selectLogin,
  (authState = Map()) => authState.getIn(["auth", "loginData"])
);
person thedude    schedule 23.08.2017