Итоги
В этом уроке вы узнали, что:
- Управляемое поле показывает то, что лежит в состоянии,
value={name}, а егоonChangeменяет состояние:onChange={(event) => setName(event.target.value)}. Поэтому страница может показывать набранное прямо во время набора, аsetName("")очищает поле. - Полю с
valueнуженonChange. Без него React оставляет в поле то, что говорит состояние, поэтому печатать в нём нельзя, и React предупреждает об этом в консоли. textareaполучаетvalue, как иinput.valueуselectравноvalueвыбранного варианта, и выбирает его состояние.- Флажок управляется через
checked, а его новое состояние —event.target.checked,trueилиfalse. - Значение поля — текст, и у поля с
type="number"тоже. Храните в состоянии текст, аNumber()применяйте там, где считаете. Пустое поле там равно0. <form onSubmit={handleSubmit}>запускает обработчик, когда форму отправляют кнопкой или клавишей Enter. Вызывайтеevent.preventDefault()первым, иначе страница загрузится заново, и всё состояние пропадёт.- Добавление из формы: функция обновления возвращает новый массив с новым элементом,
setItems((items) => [...items, { id: Date.now(), text: text }]), а потом поле очищают. - Обработчик проверяет набранное: сообщение об ошибке лежит в состоянии и записывается перед ранним
return.disabled={text.trim() === ""}не даёт нажать кнопку, пока условие равно true.
В следующем уроке, «Мини-проект: Игра-викторина», вы примените состояние, события и условия в собственной игре: вопрос, кнопки с ответами, счёт и финальный экран.
Но сначала немного практики: форма заказа футболки фестиваля. В App.jsx есть форма, но состояния пока нет.
Задание
- 1
Сделайте оба поля управляемыми: размер сначала равен
"M", количество —"1". Покажите сумму вtotal, по €20 за футболку:Итого: €60для 3 штук. - 2
Когда форму отправляют, добавьте заказ в конец списка
orders, напримерРазмер L, количество 2, а количество верните к"1".