Avatar ·

Subject 和 BehaviorSubject 在 RxJS 中的区别是什么?

大家好!我刚开始在 Angular 中学习 RxJS,对 Subject 和 BehaviorSubject 的区别感到困惑。它们似乎都用于创建 Observable,但我不明白何时该用哪个。 我有一个用于管理用户状态的服务: ```typescript import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class UserService { private userSubject = new Subject(); user$ = this.userSubject.asObservable(); login(user: User) { this.userSubject.next(user); } logout() { this.userSubject.next(null); } } ``` 问题在于,当我在调用 `login()` 或 `logout()` 之前订阅 `user$` 时,订阅者根本收不到任何值,即使之前用户已经登录过。我不得不单独存储当前状态并在订阅时传递它,这看起来像是一个临时解决方案。 我听说 BehaviorSubject 可以解决这个问题,