Почему focus сразу после setVisible не срабатывает

Во время обработчика новый input ещё не смонтирован, поэтому ref пуст. Вызывайте focus после появления DOM-узла, например в эффекте, зависящем от visible.

Короткий ответ

Что ответить на собеседовании

Во время обработчика новый input ещё не смонтирован, поэтому ref пуст. Вызывайте focus после появления DOM-узла, например в эффекте, зависящем от visible.

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

Ответ с пояснениями

Условие

Input показывается условно по visible. Обработчик делает setVisible(true); inputRef.current?.focus();, но фокус не появляется. Что происходит и где вызывать focus?

Ответ

Во время обработчика новый input ещё не смонтирован, поэтому ref пуст. Вызывайте focus после появления DOM-узла, например в эффекте, зависящем от visible.

Последовательность: событие, планирование state, render, commit DOM, затем эффект. В эффекте проверяйте visible и ref.current. Если фокус должен устанавливаться непосредственно при появлении узла, возможен callback ref с корректным жизненным циклом. Не добавляйте произвольный setTimeout как замену пониманию момента монтирования.

Источник: react.dev.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее