Отображение инпута с автоматическим фокусом по нажатию кнопки

Сразу после setShowInput новый input ещё не добавлен в DOM. Перенесите focus в эффект, зависящий от showInput, либо в callback ref.

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

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

Сразу после setShowInput новый input ещё не добавлен в DOM. Перенесите focus в эффект, зависящий от showInput, либо в callback ref.

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

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

Условие

Требуется, чтобы после клика на кнопку сразу появлялось текстовое поле и получало фокус. Проверьте, корректно ли реализовано данное поведение, и при необходимости внесите поправки.

import React, { useState, useRef } from 'react';

const ToggleComponent = () => {
    const [showInput, setShowInput] = useState(false);
    const inputElementRef = useRef(null);

    const toggleVisibility = () => {
        setShowInput(prev => !prev);
        if (inputElementRef.current) {
            inputElementRef.current.focus();
        }
    };

    return (
        <>
            <button onClick={toggleVisibility}>Toggle Input</button>
            {showInput && <input ref={inputElementRef} />}
        </>
    );
};

export default ToggleComponent;

Ответ

Сразу после setShowInput новый input ещё не добавлен в DOM. Перенесите focus в эффект, зависящий от showInput, либо в callback ref.

Оставьте обработчику только переключение state, а в компонент добавьте:

React.useEffect(() => {
  if (showInput) inputElementRef.current?.focus();
}, [showInput]);

Эффект выполнится после commit, когда ref уже установлен. При скрытии input ref станет null; важно не пытаться фокусировать старый элемент перед удалением.

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

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

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

Подробнее