> Как убрать лишние зависимости в useEffect для избежания лишних рендеров (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: ЛигаСтавок

Стек: React

> Пример ответа

Чтобы убрать лишние зависимости в useEffect, следуйте этим подходам:

  1. Используйте функциональную форму сеттера для useState, если зависимость - только для обновления состояния:

    JSX
    // Вместо
    useEffect(() => {
    setCount(count + 1);
    }, [count]);
    // Используйте
    useEffect(() => {
    setCount(prev => prev + 1);
    }, []); // count не нужен
  2. Выносите вычисления из эффекта - если значение можно вычислить на основе других данных, используйте useMemo:

    JSX
    const filteredItems = useMemo(() =>
    items.filter(item => item.active),
    [items]
    );
    // useEffect теперь не зависит от items
  3. Используйте ref для стабильных ссылок - если функция или объект не должны вызывать перезапуск эффекта:

    JSX
    const callbackRef = useRef(callback);
    callbackRef.current = callback; // обновляем без перезапуска
    useEffect(() => {
    callbackRef.current();
    }, []); // callback не в зависимостях
  4. Удалите неиспользуемые переменные - проверьте, действительно ли каждая зависимость нужна внутри эффекта. Если переменная не используется, уберите её.

  5. Разделите эффекты - если один эффект зависит от разных групп переменных, разбейте на несколько useEffect.

Главное правило: зависимости должны точно отражать то, что используется внутри эффекта. Используйте линтер (eslint-plugin-react-hooks) для автоматической проверки.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью