我正在开发一个项目,其中部分代码库使用BehaviorSubject非常自由.在大多数情况下,在没有初始状态时使用,或者需要在第一个显式"onNext/emit"之外具有初始值.
我很难确定这是否有任何不利因素?如果没有,为什么每个人都不会总是使用BehaviorSubject(甚至没有参数构建)而不是标准的Subject?
提前致谢!
除了初始值之外,BehaviorSubject与Subject完全不同:它也像ReplaySubject(1)一样.这意味着新订户将始终获得同步发出的最后一个(或初始)值.使用主题,您只能获得订阅后发生的排放.
因此,如果您希望将数据存储在服务中,则BehaviorSubject通常是一个不错的选择.另一方面,主题可能更适合向订阅者发送事件.
换句话说,当你不关心过去时使用主题.
就初始值而言,无论这些效果如何:如果您不需要,请不要使用.为什么?因为.我的意思是你也可以随时写作
var x;
x = 5;
Run Code Online (Sandbox Code Playgroud)
代替
var x = 5;
Run Code Online (Sandbox Code Playgroud)
但是......你为什么要这样?
不要发出订阅者需要努力忽略的事件.典型的Angular案例是使用您在ngOnDestroy中发出+完成的主题,因此您可以使用takeUntil来限制组件中的订阅.如果它是一个BehaviorSubject,它就行不通.
| 归档时间: |
|
| 查看次数: |
830 次 |
| 最近记录: |