NgRx订阅忽略了重复

问题描述 投票:0回答:1

我发生了一件奇怪的事情,我无法弄清楚如何解决......

为了测试这一点,我创建了一个接受字符串有效负载和选择器订阅的操作。

我的选择器是:

const getLoginFeatureState = createFeatureSelector<LoginState>('login');
export const loginResult = createSelector(getLoginFeatureState, state => state.loginResult)

行动:

export class LoginSuccess implements Action {
    readonly type = LoginActionTypes.loginSuccess

    constructor(public payload: string) { };
}

我的订阅是:

this.loginStore.pipe(select(loginSelectors.loginResult)).subscribe(loginResult => {
    console.log(loginResult);
});

我正在运行这些动作:

this.loginStore.dispatch(new loginActions.LoginSuccess("Test1"));
this.loginStore.dispatch(new loginActions.LoginSuccess("Test2"));
this.loginStore.dispatch(new loginActions.LoginSuccess("Test2"));
this.loginStore.dispatch(new loginActions.LoginSuccess("Test3"));

我的console.log显示

Test1
Test2
Test3

它完全忽略了重复的Test2。

任何帮助,为什么这是?

在我的NgRx开发工具中,它说“状态相等”,所以我猜测如果状态相等,NgRx不会触发事件?有没有办法告诉NgRx忽略这一点并始终通知我的订阅?

ngrx
1个回答
1
投票

这是设计的。

选择器被记忆 - 参见NgRx docs - 当输入相同时它不会重新执行投影机。

Alex Okrushko介绍了这个概念,以及如何根据你的需求调整它NgRx: Selectors are more powerful than you think

© www.soinside.com 2019 - 2024. All rights reserved.