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 可以解决这个问题,