为什么ngrx实体选择器会触发操作?

时间:2018-12-14 22:54:52

标签: angular typescript ngrx

我正在学习NgRx,但我不明白为什么实体选择器触发动作。我一直在寻找原因,但我还没有发现任何东西。 也许我缺少NgRx / Entity的一些基础知识。

这是我的演示代码:

selectors.ts

export const selectHeroState: MemoizedSelector<object, HeroesState> = createFeatureSelector<HeroesState>('heros');
export const selectHeroes: (state: object) => Hero[] =  heroAdapter.getSelectors(selectHeroState).selectAll;

component.ts

ngOnInit() {
 //this.store$.dispatch(new GetAll()); I thought this line of code was nescessary to fetch all data from store... 
 this.heroes$ = this.store$.select(selectHeroes); //but i just need this one as it triggers the Get All action
}

我希望已经很好地解释了我的问题。预先感谢。

1 个答案:

答案 0 :(得分:5)

选择器不会触发操作。一定还有其他触发该动作的东西吗?

例如,在我的ngOnInit中,我有以下内容:

this.store.dispatch(new productActions.Load());

这就是加载我的数据的原因。然后我可以拥有这个:

this.products$ = this.store.pipe(select(fromProduct.getProducts)) as Observable<Product[]>;

哪个选择器可以获取要在UI中使用的数据。

为了确认,我尝试像上面一样注释掉dispatch,但是它停止工作了(它没有返回任何数据)。

所以我猜是应用程序中的其他地方已经在加载数据了吗?