Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке ReplaySubject?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**ReplaySubject** - це тип `Subject` в RxJS, який **запам'ятовує кілька останніх значень і відтворює їх новим підписникам**. **Ключове:** кількість збережених значень задається в конструкторі.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняПродовжимо в тому ж форматі. --- ## Коротко (як на співбесіді) **ReplaySubject** - це тип `Subject` в RxJS, який **запам'ятовує кілька останніх значень і відтворює їх новим підписникам**. Кількість збережених значень задається в конструкторі. --- ## Розгорнуто `ReplaySubject` - це розширення `Subject`, яке **буферизує попередні значення** і при новій підписці **програє їх заново**. Приклад: ```ts import { ReplaySubject } from 'rxjs'; const subject = new ReplaySubject<number>(2); subject.next(1); subject.next(2); subject.next(3); subject.subscribe(v => console.log(v)); ``` Результат: ``` 2 3 ``` Тому що вказаний буфер **2 значення**. --- ### Конструктор ```ts new ReplaySubject<T>(bufferSize?, windowTime?) ``` Параметри: - `bufferSize` - скільки значень зберігати - `windowTime` - скільки часу зберігати значення Приклад з часом: ```ts new ReplaySubject(3, 5000) ``` Зберігає: - максимум 3 значення - не старші за 5 секунд --- ## Відмінність від BehaviorSubject | Тип | Зберігає значення | Початкове значення | Новий підписник отримує | |---|---|---|---| | Subject | Ні | Ні | нічого | | BehaviorSubject | 1 | обов'язково | останнє значення | | ReplaySubject | N | не обов'язково | останні N | Головна відмінність: - BehaviorSubject = **current state** - ReplaySubject = **history** --- ## Коли використовують ReplaySubject Рідше, ніж BehaviorSubject. Наприклад: - кешування подій - event history - логування потоків - rehydration стану - event bus Приклад event-системи: ```ts events$ = new ReplaySubject<AppEvent>(10); ``` --- ## Важливий момент (часто запитують) ReplaySubject **може призвести до витоків пам'яті**, якщо: - buffer великий - потік довгоживучий - значення важкі Тому buffer майже завжди обмежують. --- ## Типове follow-up питання На співбесіді можуть запитати: **Чому BehaviorSubject використовують частіше в Angular?** Відповідь: Тому що Angular-стан зазвичай - це **поточне значення**, а не історія.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.