4

当我将“@ngrx/router-store”添加到我的项目时,它会在开发模式和单元测试结果中向应用程序控制台发送垃圾邮件,并显示以下消息:

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

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

router: null |  RouterReducerState<SerializedRouterStateSnapshot>

和初始状态值

router: null

但它与routerReducer类型冲突,它只接受

RouterReducerState<SerializedRouterStateSnapshot>

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

4

3 回答 3

6

这对我有帮助:不要createFeatureSelector用于创建路由器功能选择器,createSelector而是使用。

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

出现此问题是因为如果特征值等于 ,则会createFeatureSelector 记录警告undefined。上面的代码等同于原始实现,但没有日志。

更新: 这是一个旨在解决问题的 PR 。

于 2019-10-03T08:10:23.577 回答
0

default return的 switch 语句中有一个吗?

 default:
   return state;
于 2020-01-05T07:35:50.030 回答
-1

尝试用一个简单的函数选择路由器状态片

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

因为 createFeatureSelector(因此得名)用于选择添加到 FEATURE 模块中的状态切片

StoreModule.forFeature('feature1', reducers)

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

export const selectFeature1 = createFeatureSelector<State, Feature1State>('feature1');
于 2019-10-11T20:48:12.917 回答