Какое условие, чтобы React распознал функцию как хук?
Хуки
Формально React «распознаёт» хук по имени: функция должна начинаться с `use` и следующей заглавной буквы (useAuth, useDebounce). Это соглашение, на котором держатся инструменты.
Что даёт правило имени
- ESLint-плагин react-hooks применяет к таким функциям правила хуков: проверяет, что они вызываются только на верхнем уровне компонента или другого хука, и следит за зависимостями (exhaustive-deps).
- Читателю сразу видно: функция может иметь состояние и вызывать другие хуки — значит, её нельзя звать в условиях или колбэках.
- React Compiler (React 19) и DevTools используют то же соглашение.
Обратная сторона: назвав обычную функцию useSomething, вы получите ложные предупреждения линтера; назвав хук getSomething — потеряете проверки, а баги с порядком вызовов проявятся в рантайме.
Что делает функцию хуком
Внутреннее использование других хуков (useState, useEffect, useContext...). Сам React во время выполнения ничего не «распознаёт»: он лишь ведёт счётчик вызовов хуков на fiber-узле рендерящегося компонента. Поэтому важен порядок вызовов, а не имя.
Условия корректности
- Вызов только из функционального компонента или другого хука (не из обычной функции, класса, обработчика).
- Только верхний уровень: без условий, циклов, раннего return.
- Имя с префикса
use— чтобы линтер это проверил.
Коротко для собеседования
Соглашение: имя начинается с use + заглавная буква — по нему ESLint (react-hooks) применяет правила хуков и проверяет зависимости. Технически же функция становится хуком, потому что использует другие хуки; React привязывает состояние по порядку вызовов на fiber-узле, поэтому вызывать хуки можно только на верхнем уровне компонента или другого хука.