Select
| Importimport{ Select }from"antd"; | 
| Sourcecomponents/select | 
| DocsEdit this page | 
| Importimport{ Select }from"antd"; | 
| Sourcecomponents/select | 
| DocsEdit this page | 
<select> element.After version 5.11.0, we provide a simpler usage <Select options={[...]} /> with better performance and potential of writing simpler code style in your applications.
Meanwhile, we deprecated the old usage in browser console, we will remove it in antd 6.0.
// works when >=5.11.0, recommended ✅return <Select options={[{ value: 'sample', label: <span>sample</span> }]} />;// works when <5.11.0, deprecated when >=5.11.0 🙅🏻♀️return (<Select onChange={onChange}><Select.Option value="sample">Sample</Select.Option></Select>);
Common props ref:Common props
| Property | Description | Type | Default | Version | 
|---|---|---|---|---|
| allowClear | Customize clear icon | boolean | { clearIcon?: ReactNode } | false | 5.8.0: Support object type | 
| autoClearSearchValue | Whether the current search will be cleared on selecting an item. Only applies when modeis set tomultipleortags | boolean | true | |
| autoFocus | Get focus by default | boolean | false | |
| defaultActiveFirstOption | Whether active first option by default | boolean | true | |
| defaultOpen | Initial open state of dropdown | boolean | - | |
| defaultValue | Initial selected option | string | string[] | number | number[] | LabeledValue | LabeledValue[] | - | |
| disabled | Whether disabled select | boolean | false | |
| popupClassName | The className of dropdown menu | string | - | 4.23.0 | 
| popupMatchSelectWidth | Determine whether the popup menu and the select input are the same width. Default set min-widthsame as input. Will ignore when value less than select width.falsewill disable virtual scroll | boolean | number | true | 5.5.0 | 
| dropdownRender | Customize dropdown content | (originNode: ReactNode) => ReactNode | - | |
| dropdownStyle | The style of dropdown menu | CSSProperties | - | |
| fieldNames | Customize node label, value, options,groupLabel field name | object | { label: label, value:value, options:options, groupLabel:label} | 4.17.0 ( groupLabeladded in 5.6.0) | 
| filterOption | If true, filter options by input, if function, filter options against it. The function will receive two arguments, inputValueandoption, if the function returnstrue, the option will be included in the filtered set; Otherwise, it will be excluded | boolean | function(inputValue, option) | true | |
| filterSort | Sort function for search options sorting, see Array.sort's compareFunction | (optionA: Option, optionB: Option, info: { searchValue: string }) => number | - | searchValue: 5.19.0 | 
| getPopupContainer | Parent Node which the selector should be rendered to. Default to body. When position issues happen, try to modify it into scrollable content and position it relative. Example | function(triggerNode) | () => document.body | |
| labelInValue | Whether to embed label in value, turn the format of value from stringto { value: string, label: ReactNode } | boolean | false | |
| listHeight | Config popup height | number | 256 | |
| loading | Indicate loading state | boolean | false | |
| maxCount | The max number of items can be selected, only applies when modeismultipleortags | number | - | 5.13.0 | 
| maxTagCount | Max tag count to show. responsivewill cost render performance | number | responsive | - | responsive: 4.10 | 
| maxTagPlaceholder | Placeholder for not showing tags | ReactNode | function(omittedValues) | - | |
| maxTagTextLength | Max tag text length to show | number | - | |
| menuItemSelectedIcon | The custom menuItemSelected icon with multiple options | ReactNode | - | |
| mode | Set mode of Select | multiple|tags | - | |
| notFoundContent | Specify content to show when no result matches | ReactNode | Not Found | |
| open | Controlled open state of dropdown | boolean | - | |
| optionFilterProp | Which prop value of option will be used for filter if filterOption is true. If optionsis set, it should be set tolabel | string | value | |
| optionLabelProp | Which prop value of option will render as content of select. Example | string | children | |
| options | Select options. Will get better perf than jsx definition | { label, value }[] | - | |
| optionRender | Customize the rendering dropdown options | (option: FlattenOptionData<BaseOptionType> , info: { index: number }) => React.ReactNode | - | 5.11.0 | 
| placeholder | Placeholder of select | ReactNode | - | |
| placement | The position where the selection box pops up | bottomLeftbottomRighttopLefttopRight | bottomLeft | |
| removeIcon | The custom remove icon | ReactNode | - | |
| searchValue | The current input "search" text | string | - | |
| showSearch | Whether select is searchable | boolean | single: false, multiple: true | |
| size | Size of Select input | large|middle|small | middle | |
| status | Set validation status | 'error' | 'warning' | - | 4.19.0 | 
| suffixIcon | The custom suffix icon. Customize icon will not response click open to avoid icon designed to do other interactive. You can use pointer-events: nonestyle to bypass | ReactNode | <DownOutlined /> | |
| tagRender | Customize tag render, only applies when modeis set tomultipleortags | (props) => ReactNode | - | |
| labelRender | Customize selected label render (LabelInValueType definition see LabelInValueType) | (props: LabelInValueType) => ReactNode | - | 5.15.0 | 
| tokenSeparators | Separator used to tokenize, only applies when mode="tags" | string[] | - | |
| value | Current selected option (considered as a immutable array) | string | string[] | number | number[] | LabeledValue | LabeledValue[] | - | |
| variant | Variants of selector | outlined|borderless|filled | outlined | 5.13.0 | 
| virtual | Disable virtual scroll when set to false | boolean | true | 4.1.0 | 
| onBlur | Called when blur | function | - | |
| onChange | Called when select an option or input value change | function(value, option:Option | Array<Option>) | - | |
| onClear | Called when clear | function | - | 4.6.0 | 
| onDeselect | Called when an option is deselected, param is the selected option's value. Only called for multipleortags, effective in multiple or tags mode only | function(value: string | number | LabeledValue) | - | |
| onDropdownVisibleChange | Called when dropdown open | (open: boolean) => void | - | |
| onFocus | Called when focus | (event: FocusEvent) => void | - | |
| onInputKeyDown | Called when key pressed | (event: KeyboardEvent) => void | - | |
| onPopupScroll | Called when dropdown scrolls | (event: UIEvent) => void | - | |
| onSearch | Callback function that is fired when input changed | function(value: string) | - | |
| onSelect | Called when an option is selected, the params are option's value (or key) and option instance | function(value: string | number | LabeledValue, option: Option) | - | 
Note, if you find that the drop-down menu scrolls with the page, or you need to trigger Select in other popup layers, please try to use
getPopupContainer={triggerNode => triggerNode.parentElement}to fix the drop-down popup rendering node in the parent element of the trigger .
| Name | Description | Version | 
|---|---|---|
| blur() | Remove focus | |
| focus() | Get focus | 
| Property | Description | Type | Default | Version | 
|---|---|---|---|---|
| className | The additional class to option | string | - | |
| disabled | Disable this option | boolean | false | |
| title | titleattribute of Select Option | string | - | |
| value | Default to filter with this property | string | number | - | 
| Property | Description | Type | Default | Version | 
|---|---|---|---|---|
| key | Group key | string | - | |
| label | Group label | React.ReactNode | - | |
| className | The additional class to option | string | - | |
| title | titleattribute of Select Option | string | - | 
| Token Name | Description | Type | Default Value | 
|---|---|---|---|
| clearBg | Background color of clear button | string | #ffffff | 
| multipleItemBg | Background color of multiple tag | string | rgba(0, 0, 0, 0.06) | 
| multipleItemBorderColor | Border color of multiple tag | string | transparent | 
| multipleItemBorderColorDisabled | Border color of multiple tag when disabled | string | transparent | 
| multipleItemColorDisabled | Text color of multiple tag when disabled | string | rgba(0, 0, 0, 0.25) | 
| multipleItemHeight | Height of multiple tag | number | 24 | 
| multipleItemHeightLG | Height of multiple tag with large size | number | 32 | 
| multipleItemHeightSM | Height of multiple tag with small size | number | 16 | 
| multipleSelectorBgDisabled | Background color of multiple selector when disabled | string | rgba(0, 0, 0, 0.04) | 
| optionActiveBg | Background color when option is active | string | rgba(0, 0, 0, 0.04) | 
| optionFontSize | Font size of option | number | 14 | 
| optionHeight | Height of option | number | 32 | 
| optionLineHeight | Line height of option | undefined | LineHeight<string | number> | 1.5714285714285714 | 
| optionPadding | Padding of option | undefined | Padding<string | number> | 5px 12px | 
| optionSelectedBg | Background color when option is selected | string | #e6f4ff | 
| optionSelectedColor | Text color when option is selected | string | rgba(0, 0, 0, 0.88) | 
| optionSelectedFontWeight | Font weight when option is selected | undefined | FontWeight | 600 | 
| selectorBg | Background color of selector | string | #ffffff | 
| showArrowPaddingInlineEnd | Inline end padding of arrow | number | 18 | 
| singleItemHeightLG | Height of single selected item with large size | number | 40 | 
| zIndexPopup | z-index of dropdown | number | 1050 | 
tags mode?It's caused by option with different label and value. You can use optionFilterProp="label" to change filter logic instead.
You can control it by open prop: codesandbox.
dropdownRender?Select will close when it lose focus. You can prevent event to handle this:
<SelectdropdownRender={() => (<divonMouseDown={(e) => {e.preventDefault();e.stopPropagation();}}>Some Content</div>)}/>
Virtual scroll internal set item height as 24px. You need to adjust listItemHeight when your option height is less and listHeight config list container height:
<Select listItemHeight={10} listHeight={250} />
Note: listItemHeight and listHeight are internal props. Please only modify when necessary.
aria- props?Select only create a11y auxiliary node when operating on. Please open Select and retry. For aria-label & aria-labelledby miss warning, please add related prop to Select with your own requirement.
Default virtual scrolling will create a mock element to simulate an accessible binding. If a screen reader needs to fully access the entire list, you can set virtual={false} to disable virtual scrolling and the accessibility option will be bound to the actual element.