0Pricing
React Academy · Урок

Неконтролируемые поля ввода с useRef

Получайте значения полей ввода DOM через ссылки вместо состояния в простых сценариях работы с формами

«Неконтролируемые поля ввода с useRef» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Добро пожаловать

В этом уроке вы будете использовать неуправляемые поля ввода вместе с useRef, чтобы получать значения полей DOM без хранения их в состоянии React.

Управляемые и неуправляемые поля ввода

**Управляемое поле ввода** получает своё значение из состояния React (значение + onChange). **Неуправляемое поле ввода** самостоятельно хранит своё значение в DOM; React считывает его через ссылку только при необходимости.
// Controlled
<input value={name} onChange={e => setName(e.target.value)} />

// Uncontrolled
const nameRef = useRef();
<input ref={nameRef} defaultValue="" />

Чтение значения при отправке

Для неуправляемых полей ввода считайте значение при отправке формы, обратившись к `ref.current.value`. Пока пользователь печатает, обновления состояния не происходят.
function Form() {
  const nameRef = useRef();
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(nameRef.current.value);
  };
  return (
    <form onSubmit={handleSubmit}>
      <input ref={nameRef} />
      <button type="submit">Submit</button>
    </form>
  );
}

defaultValue и value

Для неуправляемых полей ввода используйте `defaultValue`, а не `value`, чтобы задать начальное значение. Установка `value` без `onChange` заставляет React вывести предупреждение, и поле ввода становится доступным только для чтения.
<input ref={nameRef} defaultValue="Initial text" />

Когда использовать неуправляемые поля ввода

Неуправляемые поля ввода полезны для простых форм, в которых значения нужны только при отправке, для полей выбора файлов (React не может ими управлять), а также для критичных к производительности полей ввода, когда важно избежать повторной отрисовки.

Сброс неуправляемого поля ввода

Чтобы сбросить неуправляемое поле ввода, императивно задайте `ref.current.value = ''`. Или измените проп `key` компонента, чтобы заставить React заново смонтировать его с новым узлом DOM.
// Reset imperatively
nameRef.current.value = '';

// Or remount
setFormKey(k => k + 1);
<input key={formKey} ref={nameRef} />

Несколько ссылок для нескольких полей ввода

Для форм с несколькими неуправляемыми полями создайте отдельную ссылку для каждого поля ввода. При отправке обращайтесь к `.current.value` каждой ссылки.
const emailRef = useRef();
const passwordRef = useRef();

<input ref={emailRef} type="email" />
<input ref={passwordRef} type="password" />

Фокусировка при монтировании

useRef часто используют для автоматической фокусировки поля ввода при монтировании компонента. Считывайте ссылку внутри useEffect после монтирования.
const inputRef = useRef();
useEffect(() => {
  inputRef.current?.focus();
}, []);
<input ref={inputRef} />

Неуправляемые поля ввода и проверка данных

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

Компромисс при использовании useRef

Неуправляемые поля ввода позволяют избежать повторной отрисовки, но вы отказываетесь от реактивности React. Нельзя в реальном времени условно отрисовывать интерфейс на основе значения поля ввода, не считывая ссылку и не обновляя состояние вручную.

Быстрая проверка

Какой проп следует использовать, чтобы задать начальное значение неуправляемого поля ввода в React?

Итоги

Неуправляемые поля ввода используют ссылки для чтения значений по требованию. Используйте defaultValue для задания начальных значений, считывайте ref.current.value при отправке и сбрасывайте поле, очищая значение ссылки или изменяя ключ.

Далее

Следующий урок: **Поле выбора файла и чтение данных файла** — вы научитесь работать с полями выбора файлов, читать метаданные и данные изображений с помощью FileReader.

Часто задаваемые вопросы

Урок «Неконтролируемые поля ввода с useRef» бесплатный?

Да — полный текст урока «Неконтролируемые поля ввода с useRef» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Неконтролируемые поля ввода с useRef»?

Получайте значения полей ввода DOM через ссылки вместо состояния в простых сценариях работы с формами Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Неконтролируемые поля ввода с useRef»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Неконтролируемые поля ввода с useRef
  2. Поле выбора файла и чтение данных файла
  3. Интерфейс загрузки файлов перетаскиванием
  4. Загрузка файлов в серверный API
← Назад к React Academy