我正在努力处理下面的代码示例。我尝试过compareFilters
总是return true
,总是return false
,无论哪种方式,我的日志中都会出现很多“ *******”-至少应该我已经完全切断了供应?我想念什么?
this.filters = this.store
.select(state => state.filters)
// This line needed as otherwise change in geolocation triggers state to be
// resent, overwriting any changes user has made on filters menu
.pipe(
distinctUntilChanged(compareFilters),
tap((filters: Filters) => {
console.log("*****", filters);
this.location.pushState(
{},
"",
"/recommendations/" + toUrl(filters)
);
})
);
更笼统地说,我在组件中看到的是,无论状态的哪一部分发生了变化,ngOnChanges
每次都会报告所有道具的变化
答案 0 :(得分:0)
嗯,我不这么认为。我在StackBliz上编写了快速示例,它可以按预期工作。仅打印1张。您确定ngrx存储不会发出所有事件吗?因为您的rxjs代码是正确的。
import { Observable, of } from 'rxjs';
import { distinctUntilChanged, tap } from 'rxjs/operators';
of("1", "2", "3", "4" ,"5")
.pipe(
distinctUntilChanged(coperator),
tap(t => console.log(t))
)
.subscribe()
function coperator(t){
return true;
}
可能是问题出在调用this.location.pushState
时,您在tap方法中调用了某些东西,这些东西修改了商店,从而产生了新事件。我不知道,但反弹一些想法不会有伤害。