【问题标题】:Why are so many Subject objects in RX?为什么 RX 中有这么多 Subject 对象?
【发布时间】:2019-03-27 10:46:39
【问题描述】:

你能澄清以下几点吗 — 为什么是

  1. 主题
  2. 行为主体
  3. 重播主题

一起存在吗?

什么时候只有带有缓冲区参数的主题就足够了? 毕竟,只有这个(发出最后一个量)它们不同。

可能是:(参数是缓冲区大小)

  • 主题(0) = 普通主题();
  • 主题(1) = BehaviourSubject();
  • 主题(5) = 重播主题(5);

什么原因?

【问题讨论】:

  • 您可以在文档中阅读它rxjs.dev/api?query=subject
  • 我读过文档。我读文章。问题还不够清楚吗?文档和文章只是解释这些事情本身,而不是回答问题。
  • 每个人都做了不同的事情,正如文档中描述的那样。您不能互换它们,因为它们具有不同的功能。
  • 请原谅,但不同的是 RxJS 和 MS SQL。但是主题(RX)是从一个父级继承的,并且共享相同的功能。你能说明一个原因吗?为什么我不能互换它们?
  • 这里已经描述过了。只需阅读顶部的说明即可。它告诉你有什么区别rxjs.dev/api/index/class/BehaviorSubjectrxjs.dev/api/index/class/ReplaySubjectrxjs.dev/api/index/class/Subject

标签: rxjs behaviorsubject


【解决方案1】:

1) 主题甚至不持有值。 订阅者不会看到订阅前发出的所有值。

2) BehaviorSubject 保存最后一个值,并且必须保存一个值。 订阅者将始终获得最后发出的值。

3) ReplaySubject 持有 x 值,但不是必须的。 如果订阅者之前发出过,订阅者将获得最后的 x 值。否则他们将得到 0 - x 值。

它们是不同的,不能在它们之间进行更改而不会失去功能。

【讨论】:

  • 我不明白。它们都有一个关键点——发射物品。我真的关心我得到的“主题”发射项目的种类(类型)吗?您在那里描述的所有内容 - 都可以使用构造函数参数来解决。我想知道,真的有必要拥有完全不同类型的“主题”而不是通过构造函数来解决它吗?但我明白了你的主要想法。
  • 我的意思是,您可以为AnySubject 提供一些构造函数选项,让我们称之为。 constructor(holdValues: boolean, valuesToHold: number, initialValue: T | T[]) 等等。但这只会变得越来越复杂。这种方式对开发人员来说更容易推理。 TypeScript 没有适当的构造函数重载无济于事。
猜你喜欢
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 2019-12-14
  • 2021-05-01
  • 1970-01-01
  • 2013-02-24
相关资源
最近更新 更多