<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