Как установить фокус на поле ввода после рендеринга?
Проблема с установкой фокуса на текстовое поле в React
Я пытаюсь установить фокус на определенное текстовое поле после рендеринга компонента в React. Документация предлагает использовать refs, например:
Установите ref="nameInput"
на моем текстовом поле в функции рендера, а затем вызовите:
this.refs.nameInput.getInputDOMNode().focus();
Но где именно мне следует это вызывать? Я пробовал несколько мест, но не могу заставить это работать. Подскажите, пожалуйста, правильный подход к этой задаче.
5 ответ(ов)
Ответ @Dhiraj верный. Для удобства вы можете использовать пропс autoFocus
, чтобы input автоматически получал фокус при монтировании:
<input autoFocus name="..." />
Обратите внимание, что в JSX используется autoFocus
(с заглавной буквой F), в отличие от обычного HTML, который не чувствителен к регистру.
На момент версии React 0.15, самый лаконичный способ сфокусировать элемент ввода выглядит так:
<input ref={input => input && input.focus()}/>
Этот код использует атрибут ref
, чтобы получить доступ к элементу DOM, и при его наличии вызывает метод focus()
.
Если вы просто хотите сделать автопозиционирование (autofocus) в React, это очень просто:
<input autoFocus type="text" />
Если же вы хотите знать, куда именно вставить этот код, то ответ будет: в метод componentDidMount()
.
v014.3
componentDidMount() {
this.refs.linkInput.focus()
}
В большинстве случаев вы можете прикрепить ref к DOM-узлу и полностью избежать использования
findDOMNode
.
Прочитайте документацию API здесь: https://facebook.github.io/react/docs/top-level-api.html#reactdom.finddomnode
В документации React теперь есть раздел, посвящённый этому вопросу. Вы можете ознакомиться с ним по ссылке: Документация React о ref.
Вот пример кода, который демонстрирует использование колбэков ref
для задания фокуса на элементе TextInput
:
render: function() {
return (
<TextInput
ref={function(input) {
if (input != null) {
input.focus();
}
}} />
);
},
В данном примере, внутри функции колбэка мы проверяем, не является ли input
равным null
. Если элемент существует, вызывается метод focus()
, чтобы установить фокус на поле ввода.
Это уже не самый лучший ответ. Начиная с версии 0.13, this.refs
может быть недоступен до тех пор, пока не выполнится метод componentDidMount()
, в некоторых нестандартных случаях.
Просто добавьте атрибут autoFocus
к вашему полю ввода, как показал FakeRainBrigand выше.
Как программно выполнять навигацию с помощью React Router?
Как условно добавлять атрибуты к компонентам React?
Ошибка в ReactJS: Компонент изменяет неконтролируемый текстовый ввод на контролируемый
Метод set в useState не отражает изменения немедленно
В чем разница между React Native и React?