Angular › RxJS & Observables
What is the difference between a Subject, a BehaviorSubject, and a ReplaySubject in RxJS?
IntermediateAnswer
A plain Subject only emits values to subscribers that are already subscribed at the moment a value is sent, missing anything emitted before they subscribed. A BehaviorSubject always remembers and immediately emits its most recent value to any new subscriber, requiring an initial value. A ReplaySubject can remember and replay a specified number of past values to any new subscriber.
import { BehaviorSubject } from 'rxjs';
const currentUser$ = new BehaviorSubject<User | null>(null);
// A new subscriber immediately receives the current value, even if it was set before they subscribed
currentUser$.subscribe((user) => console.log('Current user is', user));Real-world example A user session service uses a BehaviorSubject to track the currently logged in user, ensuring any component that subscribes later, even after login already happened, still immediately receives the correct current user value.