我正在研究一个项目,在该项目中,代码库的某些部分非常自由地使用了行为。在大多数情况下,当没有初始状态或需要在第一个明确的" Onnext/Emit"之外具有初始值时使用。
我很难确定是否有缺点?另外,如果不是,为什么每个人都不总是会使用chativiorsubject(即使没有参数构造(而不是标准主题?
预先感谢!
行为对象与初始值以外的主题完全不同:它的作用也像一个replaysubject(1(。这意味着新订户将始终同步获得最后(或初始(值。有了一个主题,您只会得到订阅后发生的排放。
因此,如果您想将数据存储在服务中,则行为可能是一个不错的选择。另一方面,可能更适合向订户发出事件。
换句话说,当您从不关心过去时使用一个主题。
就最初的值而言,无论这些效果如何:如果您不需要一个效果,请不要使用一个。为什么?因为。我的意思是你也可以总是写
var x;
x = 5;
而不是
var x = 5;
但是...你为什么?
不要散发订户需要付出精力忽略的事件。一个典型的角度案例是使用您在ngondestroy中发射 完整的主题,因此您可以使用takeuntil限制组件中的订阅。如果这是一种行为,那就行不通。
尊重两种Subject
S背后的原理很重要。在大多数情况下,每个选择都应由上下文确定。一些好的初始问题将如下:
- 我的流有一个初始状态吗?
- 我需要快速简便的
Observable
/Observer
引擎吗? - 我真的只需要一个管理"下一/完整/错误"和订阅的对象?
- 订户是否需要接收最后一项发射?
这些总是要要求帮助您决定使用哪种Subject
的好问题。