始终使用BehaviorSubject 而不是Subject (RxJs\Angular) 有什么缺点吗?

2024-01-05

我正在开发一个项目,其中部分代码库相当自由地使用BehaviorSubject。在大多数情况下,当没有初始状态或需要在第一个显式“onNext/emit”之外具有初始值时使用。

我很难确定这是否有任何缺点?另外,如果不是,为什么每个人不总是使用BehaviorSubject(即使是在没有参数的情况下构造的)而不是标准的Subject?

提前致谢!


除了初始值之外,BehaviorSubject 与Subject 有很大不同:它的行为也类似于ReplaySubject(1)。这意味着新订阅者将始终获得同步发出的最后(或初始)值。对于主题,您只能获得订阅后发生的排放。

因此,如果您想将数据存储在服务中,BehaviorSubject 通常是一个不错的选择。另一方面,主题可能更适合向订阅者发出事件。

换句话说,当您不关心过去时,请使用主语。


就初始值而言,无论这些影响如何:如果不需要,就不要使用。为什么?因为。我的意思是你也可以随时写

var x;
x = 5;

代替

var x = 5;

但是……你为什么要这么做?

不要发出订阅者需要努力忽略的事件。一个典型的 Angular 案例是使用您在 ngOnDestroy 中发出 + 完成的主题,这样您就可以使用 takeUntil 来限制组件中的订阅。如果它是一个BehaviorSubject,它就行不通。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

始终使用BehaviorSubject 而不是Subject (RxJs\Angular) 有什么缺点吗? 的相关文章

随机推荐