Патерни проєктування · Middle · Запитання 2 з 75
Чому функція subscribe у реалізації Observer зазвичай повертає функцію відписки?
function subscribe(listener) {
listeners.add(listener);
return () => listeners.delete(listener);
}- ✓Правильна відповідь: Щоб підписникові було зручно відписатися й не допустити витоку пам'яті
- 2Щоб підписка спрацьовувала лише один раз і потім видалялася сама
- 3Щоб суб'єкт міг викликати підписника синхронно, без event loop
Пояснення
Повернена функція зручно лягає в cleanup useEffect: useEffect(() => store.subscribe(fn), []). Без відписки суб'єкт тримає посилання на колбеки розмонтованих компонентів - це витік і зайві виклики. Так влаштовані Redux, Zustand, useSyncExternalStore.