Select

Native select menu styled to match the design system

Category: inputs · WCAG 2.2-AA · form, dropdown, menu

Sizes

States

Props

PropTypeDefaultDescription
labelstring—Text label for the control.
hintstring—Supplementary hint text shown with the control.
errorstring—Error message shown when the value is invalid.
placeholderstring—Placeholder text shown when the field is empty.
options{ value: string; label: string; disabled?: boolean }[]—The selectable options.
size'sm' | 'md' | 'lg'mdVisual size of the component (e.g. 'sm', 'md', 'lg').
disabledbooleanfalseWhen true, disables the control and removes it from the tab order.
valuestring—The controlled value.
defaultValuestring—The initial value when uncontrolled.
onChangeReact.ChangeEventHandler<HTMLSelectElement>—Called with the change event; read the new value from `event.target.value`.
ariaLabelstring—Invisible accessible name, for when a visible element outside this component already labels it and `label` would render that text a second time. ⚠ `label` on this component is **visible**; `IconButton.label`/`Sparkline.label` are invisible names, which is the prior that costs adopters a duplicated label. The raw DOM `aria-label` still wins over this.

Design tokens

When to use

When not to use

How to build an accessible Select in React →

Examples

Basic

<Select label="Role" options={[{ value: "admin", label: "Admin" }]} />

With placeholder

<Select label="Country" placeholder="Choose…" options={countries} />

Related components

← Back to docs