Формы

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. Дополнительные материалы

Last updated

Was this helpful?