Выбор ответа Junior Формы спрашивают часто обновлено

value без onChange

Вопрос

Пользователь печатает в поле, но текст не меняется. В чём причина?

function Search() {
  const [query, setQuery] = useState('');
  return <input value={query} />;
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Поле контролируемое: без onChange состояние не меняется и ввод откатывается. value делает поле контролируемым: оно всегда показывает то, что в пропсе.

Варианты ответа

  1. Поле контролируемое: без onChange состояние не меняется и ввод откатываетсяправильный ответ
  2. У input не указан name, и React не знает, куда записать введённое значение
  3. Нужно добавить defaultValue вместе с value, тогда поле станет редактируемым
  4. React блокирует ввод, пока поле не обёрнуто в <form> с обработчиком

Разбор

value делает поле контролируемым: оно всегда показывает то, что в пропсе. Без onChange никто не меняет состояние, и ввод «откатывается». React ещё и предупредит в консоли. Нужно добавить onChange={(e) => setQuery(e.target.value)} или, если поле и правда только для чтения, readOnly.

  • name нужен для FormData, на ввод он не влияет.
  • value и defaultValue вместе указывать нельзя, React предупредит.
  • <form> для работы поля не нужен.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме