<select>¶
Встроенный компонент браузера <select> позволяет отобразить поле выбора с опциями.
1 2 3 4 | |
Описание¶
<select>¶
Чтобы отобразить поле выбора, создайте компонент встроенный в браузер <select>.
1 2 3 4 | |
Пропсы
<select> поддерживает все общие пропсы элементов
Вы можете сделать поле выбора управляемым, передав ему пропс value:
value: Строка (или массив строк дляmultiple={true}). Управляет тем, какая опция будет выбрана. Каждая строка значения соответствуетзначениюнекоторого<option>, вложенного внутрь<select>.
Когда вы передаете value, вы также должны передать обработчик onChange, который обновляет переданное значение.
Если ваш <select> является неуправляемым, вы можете передать пропс defaultValue вместо него:
defaultValue: Строка (или массив строк дляmultiple={true}). Определяет первоначально выбранный вариант.
Эти пропсы <select> актуальны как для неуправляемых, так и для управляемых полей выбора:
autoComplete: Строка. Определяет один из возможных вариантов поведения автозаполнения.autoFocus: Булево значение. Если значениеtrue, React будет фокусировать элемент на монтировании.children:<select>принимает компоненты<option>,<optgroup>и<datalist>в качестве дочерних. Вы также можете передавать собственные компоненты при условии, что они в конечном итоге отображают один из разрешенных компонентов. Если вы передаете свои собственные компоненты, которые в конечном итоге выводят теги<option>, каждый<option>, который вы выводите, должен иметьvalue.disabled: Булево значение. Еслиtrue, поле выбора не будет интерактивным и будет отображаться затемненным.form: Строка. Указываетidформы<form>, к которой принадлежит это поле выбора. Если опущено, то это ближайшая родительская форма.multiple: Булево значение. Еслиtrue, браузер разрешает множественный выбор.name: Строка. Задает имя для этого поля выбора, которое передается вместе с формой.onChange: Функция обработчикаevent. Требуется для управляемых полей выбора. Срабатывает немедленно, когда пользователь выбирает другой вариант. Ведет себя как событие браузераinput.onChangeCapture: ВерсияonChange, которая срабатывает в фазе захвата.onInput: Функция обработчикаevent. Срабатывает немедленно, когда значение изменяется пользователем. По историческим причинам в React идиоматично использоватьonChange, которая работает аналогично.onInputCapture: ВерсияonInput, которая срабатывает в фазе захвата.onInvalid: Функция обработчикаevent. Срабатывает, если ввод не прошел валидацию при отправке формы. В отличие от встроенного событияinvalid, событие ReactonInvalidвызывает всплытие.onInvalidCapture: ВерсияonInvalid, которая срабатывает в фазе захвата.required: Булево значение. Еслиtrue, значение должно быть предоставлено для отправки формы.size: Число. Для селектовmultiple={true}определяет желаемое количество изначально видимых элементов.
Предупреждения
- В отличие от HTML, передача атрибута
selectedв<option>не поддерживается. Вместо этого используйте<select defaultValue>для неуправляемых полей выбора и<select value>для управляемых полей выбора. - Если поле выбора получает параметр
value, оно будет рассматриваться как управляемое. - Окно выбора не может быть одновременно управляемым и неуправляемым.
- Блок выбора не может переключаться между управляемым и неуправляемым в течение своего срока службы.
- Каждое управляемое поле выбора нуждается в обработчике события
onChange, который синхронно обновляет его базовое значение.
Использование¶
Отображение поля выбора с опциями¶
Создайте <select> со списком компонентов <option> внутри для отображения поля выбора. Дайте каждому <option> значение value, представляющее данные, которые должны быть представлены в форме.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Предоставление метки для поля выбора¶
Обычно каждый select помещается в тег <label>. Это сообщает браузеру, что данная метка связана с этим полем выбора. Когда пользователь нажимает на метку, браузер автоматически фокусирует поле выбора. Этот тег также необходим для обеспечения доступности: программа чтения с экрана будет сообщать о надписи метки, когда пользователь наведет фокус на поле выбора.
Если вы не можете вложить select в <label>, свяжите их, передав одинаковый ID в <select id> и <label htmlFor>. Чтобы избежать конфликтов между несколькими экземплярами одного компонента, создайте такой ID с помощью useId.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
Предоставление первоначально выбранного варианта¶
По умолчанию браузер выбирает первый <option> в списке. Чтобы выбрать другой вариант по умолчанию, передайте value этого <option> в качестве defaultValue элементу <select>.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
В отличие от HTML, передача атрибута selected отдельному <option> не поддерживается.
Включение множественного выбора¶
Передайте multiple={true} в <select>, чтобы позволить пользователю выбрать несколько вариантов. В этом случае, если вы также указываете defaultValue для выбора первоначально выбранных опций, это должен быть массив.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Чтение значения поля выбора при отправке формы¶
Добавьте <form> вокруг вашего поля выбора с <button type="submit"> внутри. Это вызовет обработчик события <form onSubmit>. По умолчанию браузер отправит данные формы на текущий URL и обновит страницу. Вы можете отменить это поведение, вызвав e.preventDefault(). Считайте данные формы с помощью new FormData(e.target).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | |
Дайте name вашему <select>
Дайте name вашему <select>, например <select name="selectedFruit" />. Указанное вами name будет использоваться в качестве ключа в данных формы, например { selectedFruit: "orange" }.
Если вы используете <select multiple={true}>, то FormData, которые вы прочитаете из формы, будет включать каждое выбранное значение как отдельную пару имя-значение. Посмотрите внимательно на журналы консоли в примере выше.
Тип button
По умолчанию любая <кнопка> внутри <формы> отправит ее. Это может быть неожиданно! Если у вас есть собственный пользовательский компонент React Button, подумайте о возврате <button type="button"> вместо <button>. Затем, чтобы быть явным, используйте <button type="submit"> для кнопок, которые должны отправлять форму.
Управление полем выбора с помощью переменной состояния¶
Окно выбора типа <select /> является неуправляемым. Даже если вы передаете первоначально выбранное значение, например <select defaultValue="orange" />, ваш JSX определяет только начальное значение, а не значение в данный момент.
Чтобы отобразить управляемое поле выбора, передайте ему свойство value. React заставит поле выбора всегда иметь переданное вами value. Обычно вы управляете полем выбора, объявляя переменную состояния:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Это полезно, если вы хотите заново отображать какую-то часть пользовательского интерфейса в ответ на каждый выбор.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | |
Если вы передаете value без onChange, выбор опции будет невозможен
Когда вы управляете полем выбора, передавая ему некоторое value, вы принуждаете его всегда иметь то значение, которое вы передали. Поэтому если вы передадите переменную состояния в качестве значения, но забудете синхронно обновить эту переменную состояния в обработчике события onChange, React будет возвращать поле выбора после каждого нажатия клавиши обратно к указанному вами value.
В отличие от HTML, передача атрибута selected отдельному <option> не поддерживается.
Источник — https://react.dev/reference/react-dom/components/select