Angular / NGRX:实体和selectAll的奇怪行为?

问题描述

ExpansionPanelList来自seletAll触发事件,但没有更改到自己的功能存储中,而是在根存储更改时。

打开演示,然后单击按钮。该按钮将更改分发到根存储中,但是功能存储中的selectAll也会触发事件:

https://stackblitz.com/edit/angular-ngrx-test-123654789-a7js8p?file=src%2Fapp%2Ffeatures%2Fbar.component.ts

enter image description here

仅当getSelectors()用于接受道具作为参数的其他选择器中时,此行为才会发生。

seletAll仅在更改进入功能存储时才触发事件。

这是选择器:

seletAll

更新1

我还在ngrx github https://github.com/ngrx/platform/issues/2707

上发布了一个问题

一个ngrx开发人员说

我不确定这是否是错误,是否是错误,如何解决。 根本原因是props选择器,该选择器共享相同的selectAll实例(因为它向下传递props到selectAll)。

更新2

解决方法是将选择器设置为工厂,并且不要传递props参数:

之前

export const selectBarStore = createFeatureSelector<State>('barStore');

export const selectBarState = createSelector(
  selectBarStore,(state: State) => state ? state.bar : null
);

export const { selectEntities,selectAll } = adapter.getSelectors(selectBarState);

export const selectBarById = createSelector(
  selectAll,(itemEntities: Bar[],props: {id: number}) =>
  itemEntities ? itemEntities.filter(element => element.id === props.id) : []
);

之后

export const selectBarById = createSelector(
  selectAll,props: {id: number}) =>
  itemEntities ? itemEntities.filter(element => element.id === props.id) : []
);

主要问题是:这是NGRX错误还是我做错了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)