【问题标题】:NgRx subscription is ignoring duplicatesNgRx 订阅忽略重复项
【发布时间】:2019-03-04 15:27:39
【问题描述】:

我发生了一件奇怪的事情,我不知道如何解决......

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

我的选择器是:

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】:

    这是设计使然。

    选择器已被记忆 - 请参阅NgRx docs - 当输入相同时,它不会重新执行投影仪。

    Alex Okrushko 去年就这个概念以及如何根据您的需求进行调整NgRx: Selectors are more powerful than you think

    进行了一次演讲

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2023-01-10
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多