Основная цель любой формы - получить данные пользователя. Элементы формы это контроллируемые компоненты, значения всех полей должны быть в state.
Паттерн работы с элементами форм очень простой.
Поле в state определяет значение атрибута value инпута
Событию onChange передается метод изменяющий поле в состоянии
Получаем замкнутый круг.
При событии onChange, метод класса обновляет поле в состоянии
При изменении состояния происходит ре-рендер
Инпут отображается с обновленными данными
classAppextendsComponent{ state ={ value:'',};handleChange=e=>{this.setState({ value:e.target.value });};render(){const{value}=this.state;return<inputtype="text"value={value}onChange={this.handleChange}/>;}}
Получается что не интерфейс определяет какие у нас данные, а наоборот, данные определяют то, что видит пользователь, обновляя DOM при изменении состояния компонента.
2. Формы
Создадим форму регистрации.
Добавим поля для email и password, а заодно используем очень полезный паттерн для callback-функции передаваемой в onChange.
3. Генерация Id элементов формы
Доступность (accessibility, a11y) - очень важная тема в современном вебе. HTML-атрибут for тега label помогает читалкам и другим вспомогательным инструментам. В React он представлен jsx-атрибутом htmlFor.
Для генерации уникальных идентификаторов элементов форм используется следующий подход: для каждого экземляра компонента, при его инициализации, создается набор уникальных идентификаторов, ханящихся на экземпляре. Таким образом, между разными формами получаем уникальные id.
4. Чекбоксы
Работа с чекбоксами проста и понятна. Чекбокс может быть всего в 2-х состояниях: true или false.
Особенности чекбоксов:
Имя атрибута которому передается текущее значение из state. Для чекбоксов это checked, и передаем туда буль
При обработке события onChange, для получения значения, в объекте события обращаемся к свойству event.target.checked
Если чекбокс должен хранить значение, его так же можно повесить на атрибут value и прочитать из объекта события
Добавим к нашей форме регистрации чекбокс для подтвержения пользовательского соглашения, и сделаем кнопку сабмита неактивной пока неактивен чекбокс.
5. Радиокнопки
В отличии от привычной группировки по значению атрибута name, в React радиокнопка это всего лишь элемент интерфейса, который:
Знает выбран ли он
Может попросить форму изменить выделение
Обычно у радиокнопок есть и атрибут checked и value. К примеру радио кнопка отвечающая за выбор пола пользователя.
Добавим группу радиокнопок в нашу форму.
6. Селект
Все просто - есть селект, есть опции, у селекта есть value и onChange. Добавляем выбор возрастной категории.