Skip to main content

Як signals замінюють патерн «observable store»?

signals в Angular замінюють патерн observable store тим, що прибирають саму потребу в потоках (Observable) для відстеження стану.

Якщо коротко

  • Observable store = реактивний стан через потоки RxJS; підписки, відписки, BehaviorSubject, next() та pipe(map(...)).
  • Signals = реактивний стан через синхронні посилання, без підписок і потоків.

Розбір по суті

  1. Зберігання стану. Раніше в сервісах писали:

    ts
    private user$ = new BehaviorSubject<User | null>(null);

    Тепер просто:

    ts
    user = signal<User | null>(null);

    Значення зберігається прямо в сигналі, без обгортки потоку.

  2. Читання та реакція. Замість підписки (user$.subscribe(...)) компонент просто читає user(). Angular сам відстежує залежності й автоматично оновлює шаблон, коли сигнал змінюється.

  3. Зміна стану. Раніше - user$.next(newUser). Тепер - user.set(newUser) або user.update(u => {...}). Усе синхронно і без subscribe.

  4. Композиція. Замість combineLatest, map, switchMap - тепер є computed() і effect(). computed створює похідний стан, effect виконує побічні дії при змінах.

Головна відмінність

Signals дають реактивність без потоків, підписок і витоків пам'яті. Angular сам знає, які шаблони чи обчислення залежать від яких сигналів, і оновлює лише потрібні частини дерева.

Observable store був «реактивним» через push-модель RxJS, а signals - через pull-модель реактивних посилань.

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

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

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