Skip to main content

Що таке BehaviorSubject?

Коротко (як на співбесіді)

BehaviorSubject - це спеціальний тип Subject в RxJS, який зберігає останнє значення і одразу віддає його новим підписникам. На відміну від звичайного Subject, він вимагає початкове значення.

Часто використовується в Angular для простого state-management і передачі даних між компонентами.


Розгорнуто

BehaviorSubject - це одночасно:

  • Observable (на нього можна підписуватися)
  • Observer (в нього можна надсилати значення через next())

Головна відмінність від Subject: наявність поточного значення (current value).

Приклад:

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));

Вивід:

A: 0 A: 1 A: 2 B: 2

Другий підписник одразу отримав останнє значення (2).


В Angular використовується для

Дуже часто, для зберігання стану в сервісі:

ts
@Injectable() export class UserService { private userSubject = new BehaviorSubject<User | null>(null); user$ = this.userSubject.asObservable(); setUser(user: User) { this.userSubject.next(user); } }

Компонент:

ts
this.userService.user$.subscribe(user => { console.log(user); });

Відмінність від Subject

ТипЗберігає значенняПочаткове значенняНовий підписник отримує останнє
SubjectНіНіНі
BehaviorSubjectТакТакТак

Коли використовують BehaviorSubject

Зазвичай, коли потрібен:

  • поточний state
  • глобальний стан
  • shared data
  • reactive store light-версія

Наприклад:

  • поточний користувач
  • тема застосунку
  • стан завантаження
  • фільтри

Типове follow-up питання на співбесіді

Зазвичай запитують:

BehaviorSubject vs ReplaySubject?

Коротко:

  • BehaviorSubject → зберігає 1 останнє значення
  • ReplaySubject → зберігає N значень

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.