Back to results for “Behaviors”
Angular › RxJS & Observables

What is the difference between a Subject, a BehaviorSubject, and a ReplaySubject in RxJS?

Intermediate

Answer

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.

Common follow-ups: Why does a BehaviorSubject require an initial value while a plain Subject does not?;When would a ReplaySubject specifically be more appropriate than a BehaviorSubject?