0

我有一个安装了 ngrx/router-store 的 ngrx/store 应用程序。在应用程序中,我具有三个功能 - 两个是“渴望”(authrouter),一个是懒惰(admin)。admin包含一个名为 的切片状态user

尽管急切,路由器选择器似乎不起作用。console.warn 消息,(否则非常清晰和有指导意义!)并不能真正解决问题,因为该功能在以下内容中明确声明/定义app.module.ts

app.module.ts

StoreModule.forRoot(
  {
    [AUTH_FEATURE_KEY]: AuthFeature.reducer,
    router: routerReducer,
  },
  {
    metaReducers: !environment.production ? [] : [],
    runtimeChecks: {
      strictActionImmutability: true,
      strictStateImmutability: true,
    },
  }
),

路由器选择器.ts

export const getRouterState = createFeatureSelector<RouterReducerState<RouterStateUrl>>('router');

export const getCurrentRoute = createSelector(
  getRouterState,
  router => {
    console.log('getCurrentRoute', router) // <-- undefined
    return router.state;
  }
);

export const getRouterStateParams = createSelector(
  getCurrentRoute,
  state => state.params
);

然后在我的一个延迟加载模块中,我getRouterStateParams与实体结合:

用户选择器.ts

export const getUserFromRouteParam = createSelector(
  selectEntities,
  fromRouter.getRouterStateParams,
  (entities, params) => {
    console.log(entities, params)
    return entities[params['id']]
  }
)

这就是错误发生的地方。

在此处输入图像描述

我是在做一些根本错误的事情,还是某种竞争条件?

更新

到目前为止我尝试了什么:

  • StoreModule.forFeature()分别为每个急切的减速器设置,和StoreModule.forRoot({})
  • 设置initialNavigation: 'enabled'- 这只会导致路由切片立即出现(通常,reducer 仅在第一个导航事件之后才启动),但它不会纠正undefined来自选择器的 s
  • 不使用CustomSerializer,而是基于默认的序列化程序和工厂交付getSelectors()- 我感兴趣的所有选择器,用于 url、params 和 queryParams -undefined也返回
  • 不同的设置navigationActionTiming
  • 这个类似的问题中提到的每个可能的技巧,包括显式initialState对象
4

0 回答 0