Во время обработчика новый input ещё не смонтирован, поэтому ref пуст. Вызывайте focus после появления DOM-узла, например в эффекте, зависящем от visible.
Почему focus сразу после setVisible не срабатывает
Во время обработчика новый 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.