Вопрос проверяет понимание жизненного цикла React-компонентов и управления эффектами с зависимостями для предотвращения повторных вызовов.
В React компоненты могут перерендериваться по разным причинам: изменение состояния, пропсов или контекста. Если внутри useEffect не указать зависимости, эффект будет выполняться после каждого рендера, что может привести к нежелательному многократному запуску таймеров или запросов.
Передав пустой массив [] вторым аргументом в useEffect, мы говорим React, что эффект не зависит ни от каких значений и должен выполниться только один раз — после монтирования компонента. Это идеально подходит для инициализации данных, подписки на события или запуска одноразового таймера.
import React, { useState, useEffect } from 'react';
function TimerComponent() {
const [value, setValue] = useState(0);
useEffect(() => {
// Этот код выполнится только один раз при монтировании
const interval = setInterval(() => {
setValue(prev => prev + 1);
}, 1000);
// Очистка таймера при размонтировании
return () => clearInterval(interval);
}, []); // пустой массив зависимостей
return <div>{value}</div>;
}Функция возврата в useEffect вызывается при размонтировании компонента или перед повторным выполнением эффекта. В примере выше мы очищаем интервал, чтобы избежать утечек памяти и попыток обновить состояние размонтированного компонента.
Используйте пустой массив зависимостей в useEffect для выполнения кода только при монтировании. Это стандартный паттерн для инициализации данных, подписок и одноразовых операций в React-компонентах.
Уровень
Рейтинг:
5
Сложность:
3
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию