Перейти к содержимому
v2.5.0
English
Русский
Документация

Select

Select — составной компонент из корневого контейнера состояния и экспортируемых дочерних частей для триггера, значения, вариантов и нативного участия в форме.

API корня

Select — корневой контейнер состояния для всей композиции.

ПропТипПо умолчанию
disabledboolean—
Отключён ли select. Запрещает взаимодействие и применяет стиль отключённого состояния.
readOnlybooleanfalse
Если true, значение select нельзя изменить, но он остаётся фокусируемым.
variantSelectVariant'field'
Вариант визуального стиля элемента выбора.
sizeSelectSize'md'
Визуальный размер элемента выбора.
valueV | null—
Текущее выбранное значение (контролируемо). null очищает выбор, а undefined делает select неконтролируемым.
defaultValueV—
Значение, выбранное по умолчанию (неконтролируемо).
onChangeValue(value: V | undefined) => void—
Колбэк, вызываемый при выборе варианта.
refRef<HTMLDivElement>—
Ref на корневой элемент.
openboolean—
Управляет состоянием открытия выпадающего списка Select. Если задан, Select становится контролируемым компонентом и по этому значению определяет, открыт список или закрыт.
onChangeOpen(open: boolean) => void—
Колбэк, вызываемый при изменении состояния открытия. Вызывается со следующим состоянием открытия (true или false) каждый раз, когда пользователь открывает или закрывает Select. Полезен для синхронизации состояния Select с внешней логикой.
defaultOpenbooleanfalse
Задаёт начальное состояние открытия Select в неконтролируемом режиме. Применяется только при первом рендере и дальше игнорируется.
typeaheadbooleantrue
Включает переход к варианту при наборе начала его подписи.

Также принимает все атрибуты <div>.

API дочерних частей

SelectCombobox

Видимая поверхность триггера select.

ПропТипПо умолчанию
refRef<HTMLButtonElement>—
Ref на нижележащий элемент <button>. Полезен для управления фокусом, позиционирования и императивного доступа.

Также принимает все атрибуты <button>.

  • Типичные дочерние элементы: SelectValue, SelectIcon
  • Должна оставаться внутри Select

SelectValue

Рендерит выбранное значение или плейсхолдер.

ПропТипПо умолчанию
placeholderstring—
Текст-заполнитель, который показывается, когда не выбран ни один вариант. Отображается, когда значение select пустое или undefined. После выбора значения заполнитель заменяется содержимым выбранного варианта.
refRef<HTMLSpanElement>—
Ref, передаваемый на корневой элемент span.

Также принимает все атрибуты <span>.

  • Поддерживает содержимое плейсхолдера
  • Может рендерить собственные дочерние элементы для более богатого отображения выбранного значения

SelectIcon

Необязательная визуальная подсказка триггера.

ПропТипПо умолчанию
sizeIconSize—
Предопределённый токен размера иконки. Может быть переопределён явными шириной и высотой.
refRef<SVGSVGElement>—
Ref на SVG-элемент
strokeWidthnumber—
Толщина обводки линий и фигур SVG (в px или pt).
childrenReactNode—
Содержимое иконки (обязательно). Принимает: иконки из ~/icons; собственный встроенный SVG; компоненты иконок сторонних библиотек (например, Lucide, Tabler)

Также принимает все HTML-атрибуты.

  • Обычно рендерится в конце SelectCombobox
  • Чисто визуальная, если намеренно не добавлено собственное взаимодействие

SelectListbox

Контейнер зарегистрированных вариантов.

ПропТипПо умолчанию
refRef<HTMLDivElement>—
Ref на элемент-контейнер списка. Можно использовать для императивного доступа, например для измерений.

Также принимает все атрибуты <div>.

  • Ожидаемые дочерние элементы: SelectOption
  • Обычное место для ограничений прокрутки, полей поиска и собственного макета списка
  • Рендерится в top layer через popover="manual" и сам управляет фокусом

SelectOption

Выбираемый элемент списка.

ПропТипПо умолчанию
valueобязательныйV—
Значение этого варианта, которое передаётся в колбэк изменения при его выборе.
labelstring—
Простой текст варианта для поиска при наборе; используется вместо текста его содержимого.
childrenReactNode—
Содержимое, отображаемое для этого варианта. Может включать текст, иконки или сложную разметку.
sizeOptionSize—
Размер варианта для визуальной стилизации.
disabledboolean—
Отключает весь Option.
refRef<HTMLDivElement>—
Ref, передаваемый на корневой div варианта.

Также принимает все атрибуты <div>.

  • value должен быть string или number
  • Сам регистрируется в модели вариантов корня
  • Может рендерить более богатое дочернее содержимое, но значение выбора остаётся скалярным

SelectHiddenSelect

Скрытый нативный элемент select.

Также принимает все атрибуты <select>.

  • Рекомендуется для форм
  • Помогает с нативной отправкой и интеграцией с инструментами для форм

Хуки

useSelectContext

Продвинутый хук для собственных обёрток вокруг готовых частей.

Используйте его, только когда экспортируемых частей недостаточно для нужной композиции.

Типы

ТипОпределениеПримечания
SelectProps<V extends string | number = string>Тип пропсов корняОбобщённый тип значения для выбора.
SelectSize'xs' | 'sm' | 'md' | 'lg' | 'xl' | stringТокен визуального размера.
SelectVariant'inline' | 'field' | stringВизуальный вариант триггера.

Модель состояния

  • Выбранное значение может быть контролируемым через value или неконтролируемым через defaultValue.
  • Состояние открытия может быть контролируемым через open или неконтролируемым через defaultOpen.
  • Навигацией с клавиатуры, активным вариантом и поиском при наборе управляет корень.
  • value={null} очищает контролируемое значение, а undefined делает select неконтролируемым.
  • typeahead={false} рекомендуется, когда внутри списка рендерится настоящее текстовое поле.

Заметки по интеграции

  • Используйте SelectHiddenSelect, когда значение должно участвовать в нативной отправке формы.
  • Список рендерится в top layer, поэтому overflow, трансформации и модальные диалоги не обрезают и не перекрывают его.
  • Избегайте значений-объектов. Публичный API рассчитан только на значения string и number.