What is BehaviorSubject?
Briefly (as in an interview)
BehaviorSubject is a special type of Subject in RxJS that stores the latest value and immediately gives it to new subscribers.
Unlike a regular Subject, it requires an initial value.
It's often used in Angular for simple state management and passing data between components.
In detail
BehaviorSubject is at the same time:
- an Observable (you can subscribe to it)
- an Observer (you can send values to it via
next())
The main difference from Subject is having a current value.
Example:
ts
import { BehaviorSubject } from 'rxjs';
const subject = new BehaviorSubject<number>(0);
subject.subscribe(v => console.log('A:', v));
subject.next(1);
subject.next(2);
subject.subscribe(v => console.log('B:', v));Output:
A: 0
A: 1
A: 2
B: 2The second subscriber immediately received the latest value (2).
Used in Angular for
Very often, for storing state in a service:
ts
@Injectable()
export class UserService {
private userSubject = new BehaviorSubject<User | null>(null);
user$ = this.userSubject.asObservable();
setUser(user: User) {
this.userSubject.next(user);
}
}Component:
ts
this.userService.user$.subscribe(user => {
console.log(user);
});Difference from Subject
| Type | Stores a value | Initial value | New subscriber gets the latest |
|---|---|---|---|
| Subject | No | No | No |
| BehaviorSubject | Yes | Yes | Yes |
When BehaviorSubject is used
Usually when you need:
- current state
- global state
- shared data
- a light-version reactive store
For example:
- the current user
- the application theme
- loading state
- filters
A typical follow-up interview question
They usually ask:
BehaviorSubject vs ReplaySubject?
In short:
- BehaviorSubject → stores 1 latest value
- ReplaySubject → stores N values
Short Answer
Interview readyPremium
A concise answer to help you respond confidently on this topic during an interview.