rxjs - distinctUntilChanged 与 ngrx
问题描述
我正在为下面的代码示例而苦苦挣扎。我试过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
变化,每次都会报告所有道具的变化
解决方案
嗯,我不这么认为。我在 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 方法中调用的调用会修改您的商店以便生成新事件。我不知道,但反弹一些想法不会有什么坏处。
推荐阅读
- r - ggplot2 标题中的指数
- javascript - P5.js Visual(语法循环问题)
- c++ - 将 UBSAN 与动态加载的共享库一起使用
- mongodb - Mongoose 更新数组中对象的单个值
- c - void * 指针是否用于 C 中的泛型类型?
- php - 如何将此 SQL 查询转换为推进查询
- elasticsearch - Fluentd 日志充满了反斜杠,而 kibana 不显示 k8s pods 日志
- oracle - 如何提供多个绑定变量以在 pl/sql 块内立即执行
- java - 如何从 Maven 命令行读取环境变量并选择正确的属性文件
- record - Z3 API 中声明数据类型的等价物