Skip to content
+

Select

The Select components let you create lists of options for users to choose from.

useOption API

Import

import { useOption } from '@mui/base/useOption';
// or
import { useOption } from '@mui/base';
Learn about the difference by reading this guide on minimizing bundle size.

Parameters

NameTypeDefaultDescription
disabled*boolean
label*string | React.ReactNode
value*Value
idstring
rootRefReact.Ref<Element>

Return value

NameTypeDefaultDescription
getRootProps<ExternalProps extends Record<string, unknown>>(externalProps?: ExternalProps) => UseOptionRootSlotProps<ExternalProps>

Resolver for the root slot's props.

highlightedboolean

If true, the option is highlighted.

indexnumber
rootRefReact.RefCallback<Element> | null

Ref to the root slot DOM node.

selectedboolean

If true, the option is selected.


useOptionContextStabilizer API

Import

import { useOptionContextStabilizer } from '@mui/base/useOption';
// or
import { useOptionContextStabilizer } from '@mui/base';
Learn about the difference by reading this guide on minimizing bundle size.This hook does not accept any input parameters.

Return value

NameTypeDefaultDescription

useSelect API

Import

import { useSelect } from '@mui/base/useSelect';
// or
import { useSelect } from '@mui/base';
Learn about the difference by reading this guide on minimizing bundle size.

Parameters

NameTypeDefaultDescription
areOptionsEqual(a: OptionValue, b: OptionValue) => boolean

A function used to determine if two options' values are equal. By default, reference equality is used.
There is a performance impact when using the areOptionsEqual prop (proportional to the number of options). Therefore, it's recommented to use the default reference equality comparison whenever possible.

buttonRefReact.Ref<Element>

The ref of the trigger button element.

componentNamestring'useSelect'

The name of the component using useSelect. For debugging purposes.

defaultOpenbooleanfalse

If true, the select will be open by default.

defaultValueSelectValue<OptionValue, Multiple>

The default selected value. Use when the component is not controlled.

disabledbooleanfalse

If true, the select is disabled.

getOptionAsString(option: SelectOption<OptionValue>) => stringdefaultOptionStringifier

A function used to convert the option label to a string. This is useful when labels are elements and need to be converted to plain text to enable keyboard navigation with character keys.

getSerializedValue(option: SelectValue<SelectOption<OptionValue>, Multiple>) => React.InputHTMLAttributes<HTMLInputElement>['value']

A function to convert the currently selected value to a string. Used to set a value of a hidden input associated with the select, so that the selected value can be posted with a form.

listboxIdstring

The id attribute of the listbox element.

listboxRefReact.Ref<Element>

The ref of the listbox element.

multipleMultiplefalse

If true, the end user can select multiple values. This affects the type of the value, defaultValue, and onChange props.

namestring

The name attribute of the hidden input element. This is useful when the select is embedded in a form and you want to access the selected value in the form data.

onChange(event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent | null, value: SelectValue<OptionValue, Multiple>) => void

Callback fired when an option is selected.

onHighlightChange(event: React.MouseEvent<Element, MouseEvent> | React.KeyboardEvent<Element> | React.FocusEvent<Element, Element> | null, highlighted: OptionValue | null) => void

Callback fired when an option is highlighted.

onOpenChange(open: boolean) => void

Callback fired when the listbox is opened or closed.

openboolean

Controls the open state of the select's listbox. This is the controlled equivalent of the defaultOpen prop.

optionsReadonlyArray<SelectOptionDefinition<OptionValue>>

An alternative way to specify the options. If this parameter is set, options defined as JSX children are ignored.

requiredboolean

If true, the select embedded in a form must have a selected value. Otherwise, the form submission will fail.

valueSelectValue<OptionValue, Multiple>

The selected value. Set to null to deselect all options.

Return value

NameTypeDefaultDescription
buttonActiveboolean

If true, the trigger button is active (pressed).

buttonFocusVisibleboolean

If true, the trigger button has a visible focus.

buttonRefReact.RefCallback<Element> | null

Ref to the button slot DOM node.

contextValueSelectProviderValue<Value>

A value to be passed to the SelectProvider component.

disabledboolean

If true, the select is disabled.

dispatch(action: ListAction<Value> | SelectAction<Value>) => void

Action dispatcher for the select component. Allows to programmatically control the select.

getButtonProps<ExternalProps extends Record<string, unknown> = {}>(externalProps?: ExternalProps) => UseSelectButtonSlotProps<ExternalProps>

Resolver for the button slot's props.

getHiddenInputProps<ExternalProps extends Record<string, unknown> = {}>(externalProps?: ExternalProps) => UseSelectHiddenInputSlotProps<ExternalProps>

Resolver for the hidden input slot's props.

getListboxProps<ExternalProps extends Record<string, unknown> = {}>(externalProps?: ExternalProps) => UseSelectListboxSlotProps<ExternalProps>

Resolver for the listbox slot's props.

getOptionMetadata(optionValue: Value) => SelectOption<Value> | undefined

A function that returns the metadata of an option with a given value.

highlightedOptionValue | null

The value of the highlighted option.

listboxRefReact.RefCallback<Element> | null

Ref to the listbox slot DOM node.

openboolean

If true, the listbox is open.

optionsValue[]

Values of all the registered options.

valueSelectValue<Value, Multiple>

The value of the selected option(s).