PassFront
  1. PassFront
  2. База знаний
  3. Signals и RxJS

Чем signal отличается от BehaviorSubject и когда что использовать?

Signals и RxJS

Signal хранит значение и автоматически уведомляет тех, кто его читает, BehaviorSubject — поток RxJS, который хранит последнее значение и рассылает подписчикам.

Signal

const count = signal(0);
const double = computed(() => count() * 2);

effect(() => console.log(count()));

count.set(1);
count.update((v) => v + 1);
  • Синхронное чтение: count(), не нужен subscribe и async pipe.
  • Зависимости определяются автоматически.
  • Нет отписок: время жизни привязано к компоненту.
  • Лучше подходит для состояния интерфейса.

BehaviorSubject

  • Нужен для асинхронных потоков событий во времени: WebSocket, ввод пользователя с debounce, HTTP с повторами.
  • Мощные операторы: debounceTime, switchMap, combineLatest.

Совместная работа

const users = toSignal(users$, { initialValue: [] });  // Observable → Signal
const users$ = toObservable(usersSignal);              // Signal → Observable

Выбор

Состояние и производные значения — сигналы. Сложные потоки и асинхронные сценарии — RxJS, а границу стыкуют через toSignal.

Коротко для собеседования

Signal — синхронное реактивное значение для состояния, RxJS — инструмент для потоков событий. В Angular они используются вместе.

Другие вопросы раздела