从 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 获取所有商店的最新条目

如何从更新表中获取最新状态并将其与 MySQL 中的详细信息表连接?

在 Qt 中从用户那里获取几个值?

如何从商店动态获取图像到旋转木马煎茶触摸 2

React/Redux - 你啥时候应该从 API 获取新数据来更新你的商店?

如何从 laravel 上的 1 个单选按钮获取 2 个值?