У меня довольно простой селектор
export const isLoading = createSelector(
state => state.$loading
);
и два действия StartLayoutNavigationAction
и EndLayoutNavigationAction
, которые просто устанавливают флаг $loading
соответственно.
Я вызываю эти функции один раз, мои действия записываются в журнал:
ACTION – [Layout] Start navigation StartLayoutNavigationAction {layout: "login", type: "[Layout] Start navigation"}
ACTION – [Layout] End navigation EndLayoutNavigationAction {type: "[Layout] End navigation"}
Таким образом, можно предположить, что селектор сработал бы один раз, когда было вызвано первое действие, и один раз, когда было вызвано второе. Никаких действий между ними.
НО:
Селектор, кажется, излучает дважды параллельно. Я пипец следующим образом:
layoutLoading$: Observable<boolean> = this.store.pipe(
select(isLoading),
distinctUntilChanged((x, y) => {
console.log("Comparison:", x, y);
return x === y;
}),
tap(value => console.log("New val:", value))
);
И это вывод:
ACTION – [Layout] Start navigation StartLayoutNavigationAction {layout: "login", type: "[Layout] Start navigation"}
Comparison: false true
New val: true
Comparison: false true
New val: true
ACTION – [Layout] End navigation EndLayoutNavigationAction {type: "[Layout] End navigation"}
Comparison: true false
New val: false
Comparison: true false
New val: false
Я что-то не так понимаю? Это ожидаемое поведение?