Як signals замінюють патерн «observable store»?
signals в Angular замінюють патерн observable store тим, що прибирають саму потребу в потоках (Observable) для відстеження стану.
Якщо коротко
- Observable store = реактивний стан через потоки RxJS; підписки, відписки, BehaviorSubject,
next()таpipe(map(...)). - Signals = реактивний стан через синхронні посилання, без підписок і потоків.
Розбір по суті
-
Зберігання стану. Раніше в сервісах писали:
tsprivate user$ = new BehaviorSubject<User | null>(null);Тепер просто:
tsuser = signal<User | null>(null);Значення зберігається прямо в сигналі, без обгортки потоку.
-
Читання та реакція. Замість підписки (
user$.subscribe(...)) компонент просто читаєuser(). Angular сам відстежує залежності й автоматично оновлює шаблон, коли сигнал змінюється. -
Зміна стану. Раніше -
user$.next(newUser). Тепер -user.set(newUser)абоuser.update(u => {...}). Усе синхронно і безsubscribe. -
Композиція. Замість
combineLatest,map,switchMap- тепер єcomputed()іeffect().computedстворює похідний стан,effectвиконує побічні дії при змінах.
Головна відмінність
Signals дають реактивність без потоків, підписок і витоків пам'яті. Angular сам знає, які шаблони чи обчислення залежать від яких сигналів, і оновлює лише потрібні частини дерева.
Observable store був «реактивним» через push-модель RxJS, а signals - через pull-модель реактивних посилань.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.