Чем 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иasyncpipe. - Зависимости определяются автоматически.
- Нет отписок: время жизни привязано к компоненту.
- Лучше подходит для состояния интерфейса.
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 они используются вместе.