9

Как установить фокус на поле ввода после рендеринга?

22

Проблема с установкой фокуса на текстовое поле в React

Я пытаюсь установить фокус на определенное текстовое поле после рендеринга компонента в React. Документация предлагает использовать refs, например:

Установите ref="nameInput" на моем текстовом поле в функции рендера, а затем вызовите:

this.refs.nameInput.getInputDOMNode().focus(); 

Но где именно мне следует это вызывать? Я пробовал несколько мест, но не могу заставить это работать. Подскажите, пожалуйста, правильный подход к этой задаче.

5 ответ(ов)

12

Ответ @Dhiraj верный. Для удобства вы можете использовать пропс autoFocus, чтобы input автоматически получал фокус при монтировании:

<input autoFocus name="..." />

Обратите внимание, что в JSX используется autoFocus (с заглавной буквой F), в отличие от обычного HTML, который не чувствителен к регистру.

2

На момент версии React 0.15, самый лаконичный способ сфокусировать элемент ввода выглядит так:

<input ref={input => input && input.focus()}/>

Этот код использует атрибут ref, чтобы получить доступ к элементу DOM, и при его наличии вызывает метод focus().

0

Если вы просто хотите сделать автопозиционирование (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

0

В документации React теперь есть раздел, посвящённый этому вопросу. Вы можете ознакомиться с ним по ссылке: Документация React о ref.

Вот пример кода, который демонстрирует использование колбэков ref для задания фокуса на элементе TextInput:

render: function() {
  return (
    <TextInput
      ref={function(input) {
        if (input != null) {
          input.focus();
        }
      }} />
    );
  },

В данном примере, внутри функции колбэка мы проверяем, не является ли input равным null. Если элемент существует, вызывается метод focus(), чтобы установить фокус на поле ввода.

0

Это уже не самый лучший ответ. Начиная с версии 0.13, this.refs может быть недоступен до тех пор, пока не выполнится метод componentDidMount(), в некоторых нестандартных случаях.

Просто добавьте атрибут autoFocus к вашему полю ввода, как показал FakeRainBrigand выше.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь