javascript - 当状态发生任何变化/选择器的内存不起作用时,NgRx 选择器会发出

标签 javascript angular rxjs ngrx

我正在使用 Angular 7 和 NgRx。我创建了一个选择器以使用 filter 从商店中获取一些数据,但是当商店中的任何内容发生变化时此选择器都会发出,即使它与我的选择器无关。

我已经创建了我的问题的演示。这是我的选择器:

export const getMyArrayFilter = createSelector(
    getCounterState,
    state => state.myArray.filter(x => x === 'new Item')
);

我在这里使用我的 getMyArrayFilter 选择器:

this.store.pipe(select(fromRoot.getMyArrayFilter)).subscribe(x => console.log(x));

但如前所述,此选择器将在状态发生任何变化时发出。

请看this StackBlitz 演示。

如果您尝试单击“将项目添加到数组”或“-”或“+”按钮,那么我的 getMyArrayFilter 将发出并每次都记录到控制台。如果我的状态发生变化,我的选择器是否应该只发出值?

我看过this提到使用 distinctUntilChanged 的 SOF 问题,但这似乎对我不起作用。

最佳答案

正如 Alejandro 所指出的,这是因为 myArray 有一个新的引用。 您可以根据需要修改内存,Alex Okrushko 在他的演讲中就是这样做的 NgRx: Selectors are more powerful than you think

enter image description here

enter image description here

关于javascript - 当状态发生任何变化/选择器的内存不起作用时,NgRx 选择器会发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094478/

相关文章:

javascript - 错误 : Can't set headers after they are sent to the client

javascript - 是否可以在单个语句中从另一个模块导出 * 和默认值?

angular - 升级到 Angular 6/Material 6 后,为什么我会遇到 'mat-input-container is not a known element'?

angular - 为什么 *NgIf 不能使用 bool 值工作 angular 9

recursion - Angular 2 : @ViewChildren for recursive component

javascript - 分配给组件属性时不执行订阅

javascript - 如何单击具有单击事件的元素下的按钮

javascript - 如何使滚动页脚固定然后返回滚动

rxjs - 有没有像等到第一个运算符(operator)那样的东西?

javascript - 使用 Angular 2 中的 Observables 获取一次数据