Вопрос проверяет понимание паттерна подписки и умение связать внешний источник изменений с жизненным циклом React-компонента.
Подписка реализуется через механизм, при котором внешний объект уведомляет подписчиков об изменениях. React-компонент подписывается при монтировании и отписывается при размонтировании. При получении уведомления компонент инициирует ререндер через setState или другой механизм React. Важно, чтобы подписка и отписка были симметричны.
Подписка — это базовый способ “сообщить” React, что во внешнем мире что-то изменилось.
Подписка (subscription) — это механизм, при котором объект хранит список слушателей и уведомляет их при изменении своего состояния.
Внешний объект должен уметь:
Хранить состояние.
Регистрировать подписчиков.
Уведомлять их при изменениях.
const store = {
value: 0,
listeners: new Set<() => void>(),
getState() {
return this.value;
},
setState(next: number) {
this.value = next;
this.listeners.forEach((l) => l());
},
subscribe(listener: () => void) {
this.listeners.add(listener);
return () => this.listeners.delete(listener);
},
};
useEffect(() => {
const unsubscribe = store.subscribe(() => {
setTick((v) => v + 1); // инициируем ререндер
});
return unsubscribe;
}, []);
Подписка создаётся при монтировании.
Отписка выполняется при размонтировании.
React получает сигнал о необходимости рендера.
Забывать отписываться.
Создавать подписку при каждом рендере.
Мутировать стор без уведомления подписчиков.
Подписка на внешний объект — это явный контракт между внешним состоянием и React, без которого ререндеры невозможны.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию