Вопрос проверяет понимание жизненного цикла useEffect и моментов, когда происходит очистка эффектов.
Cleanup-функция вызывается перед повторным выполнением эффекта и при размонтировании компонента. Если у эффекта пустой массив зависимостей, cleanup вызовется только при unmount. В StrictMode в dev-режиме cleanup может вызываться чаще. Это нормальное поведение.
Cleanup — это часть жизненного цикла эффекта и он строго привязан к зависимостям.
Cleanup — логика очистки эффекта перед его повторным запуском или удалением компонента.
Unmount компонента
Компонент удаляется из DOM.
Изменение зависимостей
Старый эффект очищается.
Затем запускается новый эффект.
StrictMode (dev)
Эффект и cleanup вызываются дополнительно для проверки.
useEffect(() => {
console.log("effect for", id);
return () => {
console.log("cleanup for", id);
};
}, [id]);
id меняется.
Выполняется cleanup для старого id.
Запускается эффект для нового id.
Cleanup-функция всегда вызывается перед уничтожением эффекта — либо из-за изменения зависимостей, либо при размонтировании компонента.