Skip to main content

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: 2

The 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

TypeStores a valueInitial valueNew subscriber gets the latest
SubjectNoNoNo
BehaviorSubjectYesYesYes

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 ready
Premium

A concise answer to help you respond confidently on this topic during an interview.