我是 NgRx 的新手。看了一堆之后,我@ngrx/router-store
在app状态中添加了router(),来访问selector中的router参数。我正在使用 aCustomRouterSerializer
与RouterState.Minimal
。从那时起,我遇到了一个问题,例如,当我从详细信息页面 ( /hero/:heroId ) 导航到列表页面 ( / ) 时, getSelectedHero
详细信息页面的选择器被调用,这会导致其他问题。当然,我可以将空检查放入...
但由于我是初学者,我想我最好问一下。getSelectedHero
在转换到不同页面时调用似乎是错误的 。确定路由器状态正在改变,但是?
我花了一些时间试图找到一个不包含未定义检查的解决方案。
我创建了一个演示该问题的“超级”应用程序。我将它推送到GitHub和StackBlitz。
这是详细页面 ( /hero/:heroId ) 中的选择器代码,当您离开它时会调用该代码。
export const getSelectedHero = createSelector(
selectHeroesState,
getRouteState,
(state, router) => {
const hero = state.entities[router.state.params.heroId];
// FixMe: simplifies the problem... hero is undefined if you navigation for /hero/:heroId to / and following line will throw an error.
console.log("getSelectedHero", hero, hero.id, hero.name);
return hero;
}
);
在详细信息页面 (/hero/:heroId) 我使用以下内容:
public ngOnInit() {
this.hero$ = this.store.pipe(select(getSelectedHero));
}