Формы
1. Контролируемый элемент
Основная цель любой формы - получить данные пользователя. Элементы формы это контроллируемые компоненты, значения всех полей должны быть в state.
Паттерн работы с элементами форм очень простой.
Поле в
stateопределяет значение атрибутаvalueинпутаСобытию
onChangeпередается метод изменяющий поле в состоянии
Получаем замкнутый круг.
При событии
onChange, метод класса обновляет поле в состоянииПри изменении состояния происходит ре-рендер
Инпут отображается с обновленными данными
class App extends Component {
state = {
value: '',
};
handleChange = e => {
this.setState({ value: e.target.value });
};
render() {
const { value } = this.state;
return <input type="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. Добавляем выбор возрастной категории.
7. Дополнительные материалы
Controlled Components
Last updated
Was this helpful?