Этап 3 из 12 · ≈ 4 ч

Пользовательские хуки

Основа с Middle

Как выносить повторяющуюся логику с состоянием и эффектами в свои хуки.

Пользовательский хук — функция с именем на use, которая вызывает другие хуки. Она делит логику, а не состояние: у каждого компонента, который её вызвал, своё состояние.

function useDebounced(value, delay = 300) {
  const [v, setV] = useState(value);
  useEffect(() => {
    const id = setTimeout(() => setV(value), delay);
    return () => clearTimeout(id);
  }, [value, delay]);
  return v;
}

const q = useDebounced(search);

Что важно знать

  • Подчиняются тем же правилам хуков: вызывать на верхнем уровне.
  • Хорошие кандидаты: подписки (useOnlineStatus, useMediaQuery), таймеры, работа с localStorage, логика форм.
  • Возвращать стабильные значения (useCallback для функций), если их будут использовать в зависимостях.
  • Тестирование хуков — renderHook из Testing Library.

Критерии освоения

Middle ≈ 4 ч

  • Выносит повторяющуюся логику в пользовательские хуки со стабильным возвращаемым значением
  • Тестирует хуки через renderHook

Практика. Написать хуки useDebounce, useMediaQuery и useLocalStorage с тестами.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как писать пользовательские хуки?Middle

Пользовательский хук — функция с именем use…, внутри которой вызываются другие хуки; так выносят повторяющуюся логику (подписка на размер окна, debounce, загрузка данных, работа с формой). Каждый вызов хука получает своё состояние. Возвращаемые функции и…

Полный разбор
Почему пользовательские хуки вытеснили HOC и render props?Middle

HOC — функция, которая принимает компонент и возвращает обёрнутый с дополнительными props (withUser(Profile)). Render props — компонент вызывает функцию-проп для отрисовки (<Mouse render={pos => ...}/>). Оба приёма делили логику, но давали «ад обёрток» в…

Полный разбор
Как тестировать пользовательские хуки?Middle

Хук нельзя вызвать вне компонента, поэтому используют renderHook из Testing Library: он рендерит служебный компонент и отдаёт result.current — текущее возвращаемое значение. Действия, меняющие состояние, оборачивают в act; асинхронные результаты ждут через…

Полный разбор
Какие правила хуков в React и почему их нельзя вызывать в условиях?Junior

Хуки вызывают только на верхнем уровне компонента или своего хука — не в условиях, циклах и вложенных функциях — и только из React-функций. Причина: React хранит состояние хуков по порядку вызова; если порядок меняется между рендерами, состояние перепутается.

Полный разбор

Документация

← Вся карта «React»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования