我正在从事一个项目,其中部分代码库非常自由地使用 BehaviorSubject。在大多数情况下,在没有初始状态或需要在第一个显式“onNext/emit”之外设置初始值时使用。
我很难确定这是否有任何缺点?另外,如果不是,为什么不是每个人都总是使用 BehaviorSubject(甚至在没有参数的情况下构建)而不是标准的 Subject?
提前致谢!
最佳答案
除了初始值之外,BehaviorSubject 与 Subject 完全不同:它也像 ReplaySubject(1)。这意味着新订阅者将始终获得同步发出的最后(或初始)值。使用主题,您只会获得订阅后发生的排放量。
因此,如果您想在服务中存储数据,BehaviorSubject 通常是一个不错的选择。另一方面,Subject 可能更适合向订阅者发送事件。
换句话说,当您不关心过去时,请使用 Subject。
就初始值而言,不管这些影响如何:如果你不需要,就不要使用。为什么?因为。我的意思是你也可以随时写
var x;
x = 5;
代替
var x = 5;
但是……你为什么要这么做?
不要发出订阅者需要努力忽略的事件。一个典型的 Angular 案例是使用一个 Subject ,你在 ngOnDestroy 中发出 + complete 这样你就可以使用 takeUntil 来限制组件中的订阅。如果它是一个 BehaviorSubject,它就不会工作。
关于angular - 总是使用 BehaviorSubject 而不是 Subject (RxJs\Angular) 有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504713/