Qual é a diferença entre Subject e BehaviorSubject no RxJS?
Olá a todos! Comecei a estudar RxJS no Angular e fiquei confuso sobre a diferença entre Subject e BehaviorSubject. Ambos parecem ser usados para criar Observable, mas não entendo quando usar cada um.
Tenho um serviço para gerenciar o estado do usuário:
```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);
}
}
```
O problema ocorre quando me inscrevo em `user$` antes de `login()` ou `logout()` ser chamado. O assinante simplesmente não recebe nenhum valor, mesmo que o usuário já tenha feito login anteriormente. Preciso armazenar o estado atual separadamente e passá-lo na inscrição, o que parece uma gambiarra.
Ouvi dizer que o BehaviorSubject pode resolver esse problema,