Уроки39. BehaviorSubject: текущее состояние
Уроки · 39
39. BehaviorSubject: текущее состояние
BehaviorSubject — Subject с памятью текущего
BehaviorSubject — это Subject, который помнит последнее значение. Поэтому:
- Ему нужно начальное значение при создании.
- Каждый новый подписчик мгновенно получает текущее значение (snapshot).
- Можно синхронно получить значение через
.getValue().
const user$ = new BehaviorSubject('Guest');
user$.subscribe(v => console.log('A:', v)); // → A: Guest (мгновенно)
user$.next('Admin'); // → A: Admin
user$.subscribe(v => console.log('B:', v)); // → B: Admin (мгновенно, последнее)
user$.getValue(); // → 'Admin' (синхронно)
Где использовать
- Текущий пользователь / тема / язык — состояние, у которого всегда есть значение.
- Простое хранилище состояния в Angular-сервисе.
- Любая ситуация, где «опоздавший» подписчик должен сразу узнать текущее.
Современная альтернатива
В новом Angular для локального состояния часто удобнее signal. Но BehaviorSubject всё ещё незаменим, когда состояние должно жить как Observable (например, для пайпа async).
Что нужно сделать
- Создайте
const user$ = new BehaviorSubject('Guest'); - Под первой подпиской вызовите
user$.next('Admin'); - Лог
Currentуже используетgetValue()— менять не нужно.
Решение spoiler · click to reveal
const { BehaviorSubject } = Rx;
const user$ = new BehaviorSubject('Guest');
user$.subscribe(value => console.log('Sub A: ' + value));
user$.next('Admin');
user$.subscribe(value => console.log('Sub B: ' + value));
console.log('Current: ' + user$.getValue()); script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...