从 rxjs 商店中的状态获取最新的 2 个值
Posted
技术标签:
【中文标题】从 rxjs 商店中的状态获取最新的 2 个值【英文标题】:Get latest 2 values from status in rxjs store 【发布时间】:2019-11-19 23:20:50 【问题描述】:我需要跟踪 store 上最新 id 的变化,所以我需要获取变化前和变化后的值。
this.store.select(currentSearchSelector).subscribe(search =>
this.currentSearchId = search.id;
console.log('current ' + this.currentSearchId);
// I need to detect the change on this id in the store
);
在不丢失之前的变化的情况下,关注最新变化的正确做法是什么?
例如:如果 currentSearchID = 21 然后更改为 22 我需要检测此更改。 在我的订阅中,listner 将只收到最新的更改。
【问题讨论】:
【参考方案1】:感谢您的提问!
我认为您可以使用值为 2 的 bufferCount 运算符。
它将创建一个仅在缓冲区已满时才发出值的可观察对象,并将值作为数组发出。要了解更多信息,您可以查看official documentation。
附:在您的情况下,缓冲区的大小应为 2。
this.store.select(currentSearchSelector)
.pipe(bufferCount(2))
.subscribe(([previousSearch, currentSearch]) =>
this.currentSearchId = currentSearch.id;
console.log('current ' + this.currentSearchId);
console.log('previous ' + previousSearch.id);
);
此外,还有一个bufferCount
运算符StackBlitz 的示例
更新
pairwise operator 是更具体的 bufferCount 版本,它只是将最后两个项目一起发出,在这里可能更合适。
无论您选择哪个,您可能还需要将其与 filter operator 结合起来,以检查搜索 ID 的变化。
【讨论】:
我正在尝试使用 bufferCount,但之前和当前搜索的当前 id 仍然相同 @palAlaa Angular-ish example.以上是关于从 rxjs 商店中的状态获取最新的 2 个值的主要内容,如果未能解决你的问题,请参考以下文章
如何从更新表中获取最新状态并将其与 MySQL 中的详细信息表连接?