Как заставить замолчать "Имя функции" router "не существует в состоянии ..." ngrx / router-store warning - PullRequest
3 голосов
/ 03 октября 2019

Когда я добавляю «@ ngrx / router-store» в свой проект, он спамит консоль приложения в режиме разработки и результаты модульного тестирования следующим сообщением:

Имя функции «router»не существует в состоянии, поэтому createFeatureSelector не может получить к нему доступ. Убедитесь, что он импортирован в загруженный модуль с помощью StoreModule.forRoot ('router', ...) или StoreModule.forFeature ('router', ...). Если предполагается, что состояние по умолчанию не определено, как в случае с состоянием маршрутизатора, это предупреждающее сообщение только для разработки можно игнорировать.

Я попытался установить для свойства свойства router тип

router: null |  RouterReducerState<SerializedRouterStateSnapshot>

и начальное значение состояния

router: null

, но оно конфликтует с типом routerReducer, который принимает только

RouterReducerState<SerializedRouterStateSnapshot>

Как отключить это предупреждение? Я, честно говоря, нахожу это довольно раздражающим.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Вот что мне помогло: не используйте createFeatureSelector для создания селектора функций маршрутизатора, используйте createSelector.

export const routerState = createSelector((state: State) => state.router, value => value)

Проблема возникает из-за того, что createFeatureSelector регистрирует предупреждение если значение признака равно undefined. Приведенный выше код эквивалентен исходной реализации, но без журнала.

Обновление: Вот PR , нацеленный на решение проблемы.

0 голосов
/ 11 октября 2019

попробуйте выбрать фрагмент состояния маршрутизатора с помощью простой функции

export const selectRouter = (state: State) => state.router;

, поскольку createFeatureSelector, следовательно, имя, используется для выбора фрагмента состояния, добавляемого в модуле FEATURE

StoreModule.forFeature('feature1', reducers)

в этом случае вы должны использовать createFeatureSelector

export const selectFeature1 = createFeatureSelector<State, Feature1State>('feature1');
...