如何使“功能名称“路由器”在该状态下不存在...”静音ngrx /路由器存储警告

时间:2019-10-03 08:10:23

标签: angular typescript ngrx ngrx-router-store

当我在项目中添加“ @ ngrx / router-store”时,它会在开发模式下向应用程序控制台发送垃圾邮件,并通过以下消息对单元测试结果进行垃圾邮件处理:

  

状态中不存在功能名称“ router”,因此createFeatureSelector无法访问它。确保使用StoreModule.forRoot('router',...)或StoreModule.forFeature('router',...)将其导入已加载的模块中。如果默认状态是不确定的(如路由器状态一样),则可以忽略此仅开发警告消息。

我试图将router状态属性类型设置为

router: null |  RouterReducerState<SerializedRouterStateSnapshot>

和初始状态值

router: null

但与routerReducer类型冲突,该类型仅接受

RouterReducerState<SerializedRouterStateSnapshot>

如何禁用此警告?老实说,我觉得这很烦人。

2 个答案:

答案 0 :(得分:3)

这就是帮助我的:不要使用createFeatureSelector创建路由器功能选择器,而应使用createSelector

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

发生此问题的原因是,如果特征值等于createFeatureSelector,则undefined logs a warning。上面的代码等效于原始实现,但没有日志。

更新here's a PR旨在解决该问题。

答案 1 :(得分:-1)

尝试通过简单的功能选择路由器状态片

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

因为createFeatureSelector(即名称)用于选择在FEATURE模块中添加的状态切片

StoreModule.forFeature('feature1', reducers)

在这种情况下,您应该使用createFeatureSelector

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