JGuang

TreeSelect

TreeSelect · Ant Design

Preview
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

TreeSelect

Tree selection control.

When To Use

TreeSelect is similar to Select, but the values are provided in a tree like structure. Any data whose entries are defined in a hierarchical manner is fit to use this control. Examples of such case may include a corporate hierarchy, a directory structure, and so on.

Examples

  • Basic · basic
  • Multiple Selection · multiple
  • Generate from tree data · treeData
  • Checkable · checkable
  • Asynchronous loading · async
  • Show Tree Line · treeLine
  • Placement · placement
  • Variants · variant
  • Status · status
  • Max Count · maxCount
  • Prefix and Suffix · suffix
  • Custom semantic dom styling · style-class

API

Common props ref:Common props

Tree props

PropertyDescriptionTypeDefaultVersionGlobal Config
allowClearCustomize clear iconboolean | { clearIcon?: ReactNode }false5.8.0: Support object type×
autoClearSearchValueIf auto clear search input value when multiple select is selected/deselectedbooleantrue×
borderedWhether has border style, please use variant insteadbooleantrue-×
classNamesCustomize class for each semantic structure inside the component. Supports object or function.Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-5.25.0
defaultOpenInitial open state of dropdownboolean-×
defaultValueTo set the initial selected treeNode(s)string | string[]-×
disabledDisabled or notbooleanfalse×
dropdownClassNameThe className of dropdown menu, please use classNames.popup.root insteadstring--×
dropdownMatchSelectWidthDetermine whether the popup menu and the select input are the same width, please use popupMatchSelectWidth insteadboolean | numbertrue-×
popupClassNameThe className of dropdown menu, use classNames.popup.root insteadstring-4.23.0×
popupMatchSelectWidthDetermine whether the popup menu and the select input are the same width. Default set min-width same as input. Will ignore when value less than select width. false will disable virtual scrollboolean | numbertrue5.5.0×
dropdownRenderCustomize dropdown content, use popupRender instead(originNode: ReactElement) => ReactNode-×
popupRenderCustomize dropdown content(originNode: ReactElement) => ReactNode-×
dropdownStyleTo set the style of the dropdown menu, use styles.popup.root insteadCSSProperties-×
fieldNamesCustomize node label, value, children field nameobject{ label: label, value: value, children: children }4.17.0×
filterTreeNodeWhether to filter treeNodes by input value. The value of treeNodeFilterProp is used for filtering by defaultboolean | function(inputValue: string, treeNode: TreeNode) (should return boolean)function×
getPopupContainerTo set the container of the dropdown menu. The default is to create a div element in body, you can reset it to the scrolling area and make a relative reposition. examplefunction(triggerNode)() => document.body×
labelInValueWhether to embed label in value, turn the format of value from string to {value: string, label: ReactNode, halfChecked: boolean (Is the option list in a semi selected state and not displayed in the values)}booleanfalse×
listHeightConfig popup heightnumber256×
loadDataLoad data asynchronously. Will not load when filtering. Check FAQ for more infofunction(node)-×
maxCountThe maximum number of items that can be selected. Only takes effect when multiple=true. If (showCheckedStrategy = 'SHOW_ALL' and treeCheckStrictly is disabled) or showCheckedStrategy = 'SHOW_PARENT' is used, maxCount will not take effect.number-5.23.0×
maxTagCountMax tag count to show. responsive will cost render performancenumber | responsive-responsive: 4.10×
maxTagPlaceholderPlaceholder for not showing tagsReactNode | function(omittedValues)-×
maxTagTextLengthMax tag text length to shownumber-×
multipleSupport multiple or not, will be true when enable treeCheckablebooleanfalse×
notFoundContentSpecify content to show when no result matchesReactNodeNo data×
openControlled open state of dropdownboolean-×
placeholderPlaceholder of the select inputstring-×
placementThe position where the selection box pops upbottomLeft bottomRight topLeft topRightbottomLeft×
prefixThe custom prefixReactNode-5.22.0×
searchValueWork with onSearch to make search value controlledstring-×
showArrowWhether to show the arrow icon, please use suffixIcon={null} insteadbooleantrue-×
showCheckedStrategyThe way show selected item in box when treeCheckable set. Default: just show child nodes. TreeSelect.SHOW_ALL: show all checked treeNodes (include parent treeNode). TreeSelect.SHOW_PARENT: show checked treeNodes (just show parent treeNode)TreeSelect.SHOW_ALL | TreeSelect.SHOW_PARENT | TreeSelect.SHOW_CHILDTreeSelect.SHOW_CHILD×
showSearchSupport search or notboolean | Objectsingle: false | multiple: true×
sizeTo set the size of the select inputlarge | medium | small-×
statusSet validation status'error' | 'warning'-4.19.0×
stylesCustomize inline style for each semantic structure inside the component. Supports object or function.Record<SemanticDOM, CSSProperties> | (info: { props })=> Record<SemanticDOM, CSSProperties>-5.25.0
suffixIconThe custom suffix iconReactNode<DownOutlined />×
switcherIconCustomize collapse/expand icon of tree nodeReactNode | ((props: AntTreeNodeProps) => ReactNode)-renderProps: 4.20.05.28.0
tagRenderCustomize tag render when multiple(props) => ReactNode-×
treeCheckableWhether to show checkbox on the treeNodesbooleanfalse×
treeCheckStrictlyWhether to check nodes precisely (in the checkable mode), means parent and child nodes are not associated, and it will make labelInValue be truebooleanfalse×
treeDataData of the treeNodes, manual construction work is no longer needed if this property has been set(ensure the Uniqueness of each value)array<{ value, title, children, [disabled, disableCheckbox, selectable, checkable] }>[]×
treeDataSimpleModeEnable simple mode of treeData. Changes the treeData schema to: [{id:1, pId:0, value:'1', title:"test1",...},...] where pId is parent node's id). It is possible to replace the default id and pId keys by providing object to treeDataSimpleModeboolean | object<{ id: string, pId: string, rootPId: string }>false×
treeDefaultExpandAllWhether to expand all treeNodes by defaultbooleanfalse×
treeDefaultExpandedKeysDefault expanded treeNodesstring[]-×
treeExpandActionTree title open logic when click, optional: false | click | doubleClickstring | booleanfalse4.21.0×
treeExpandedKeysSet expanded keysstring[]-×
treeIconShows the icon before a TreeNode's title. There is no default style; you must set a custom style for it if set to truebooleanfalse×
treeLineShow the line. Ref Tree - showLineboolean | objectfalse4.17.0×
treeLoadedKeys(Controlled) Set loaded tree nodes, work with loadData onlystring[][]×
treeNodeFilterPropWill be used for filtering if filterTreeNode returns truestringvalue×
treeNodeLabelPropWill render as content of selectstringtitle×
treeTitleRenderCustomize tree node title render(nodeData) => ReactNode-5.12.0×
valueTo set the current selected treeNode(s)string | string[]-×
variantVariants of selectoroutlined | borderless | filled | underlinedoutlined5.13.0 | underlined: 5.24.05.19.0
virtualDisable virtual scroll when set to falsebooleantrue4.1.0×
onChangeA callback function, can be executed when selected treeNodes or input value changefunction(value, label, extra)-×
onClearCalled when clear() => void--×
onDropdownVisibleChangeCalled when dropdown open, use onOpenChange insteadfunction(open)-×
onOpenChangeCalled when dropdown open(open: boolean) => void-×
onPopupScrollCalled when dropdown scrolls(event: UIEvent) => void-5.17.0×
onSearchA callback function, can be executed when the search input changesfunction(value: string)-×
onSelectA callback function, can be executed when you select a treeNodefunction(value, node, extra)-×
onTreeExpandA callback function, can be executed when treeNode expandedfunction(expandedKeys)-×

showSearch

PropertyDescriptionTypeDefaultVersion
autoClearSearchValueIf auto clear search input value when multiple select is selected/deselectedbooleantrue
filterTreeNodeWhether to filter treeNodes by input value. The value of treeNodeFilterProp is used for filtering by defaultboolean | function(inputValue: string, treeNode: TreeNode) (should return boolean)function
searchValueWork with onSearch to make search value controlledstring-
treeNodeFilterPropWill be used for filtering if filterTreeNode returns truestringvalue
onSearchA callback function, can be executed when the search input changesfunction(value: string)-

Tree Methods

NameDescriptionVersion
blur()Remove focus
focus()Get focus

TreeNode props

We recommend you to use treeData rather than TreeNode, to avoid the trouble of manual construction.

PropertyDescriptionTypeDefaultVersion
checkableWhen Tree is checkable, set TreeNode display Checkbox or notboolean-
disableCheckboxDisables the checkbox of the treeNodebooleanfalse
disabledDisabled or notbooleanfalse
isLeafLeaf node or notbooleanfalse
keyRequired property (unless using treeDataSimpleMode), should be unique in the treestring-
selectableWhether can be selectedbooleantrue
titleContent showed on the treeNodesReactNode---
valueWill be treated as treeNodeFilterProp by default, should be unique in the treestring-

Semantic DOM

Semantic nodeNative descriptionVersion
rootRoot element with tree selector base styles, border, border radius container styles—
prefixPrefix element with prefix content layout and styles—
placeholderPlaceholder element with font styles and colors for placeholder text—
inputInput element with text input, search, selected value display and other input core interaction styles—
suffixSuffix element with suffix content, clear button, dropdown arrow and other suffix area styles—
popup.rootPopup element with dropdown tree selection panel positioning, z-index, background, border, shadow and other popup layer styles—
popup.itemPopup item element with tree node option styles, hover state, selected state and other interaction states—
popup.itemTitlePopup title element with tree node title text display styles—
popup.itemSwitcherPopup switcher element with tree node expand/collapse button styles and background6.4.0
contentMultiple selection container with layout, spacing, and wrapping styles for selected items (multiple)—
itemMultiple selection item element with border, background, padding, and margin styles (multiple)—
itemContentMultiple selection item content area with text ellipsis styles (multiple)—
itemRemoveMultiple selection item remove button with font-related styles (multiple)—

Semantic description source: vendor/.dumi/theme/common/TreeSelectSemanticTemplate.tsx

Design Token

Types, inheritance and declarations retain the pinned native source. Defaults are computed by the native theme and may be overridden by ConfigProvider; this table does not invent static defaults.

Native ComponentToken declares no directly extractable own fields. Shared tokens and inheritance are defined by the declarations below.

Declaration source: vendor/components/tree-select/style/index.ts

import { unit } from '@ant-design/cssinjs';

import { getStyle as getCheckboxStyle } from '../../checkbox/style';

import type {
  AliasToken,
  CSSUtil,
  FullToken,
  GenerateStyle,
  GetDefaultToken,
} from '../../theme/internal';

import { genStyleHooks, mergeToken } from '../../theme/internal';

import type { TreeSharedToken } from '../../tree/style';

import { genTreeStyle, initComponentToken } from '../../tree/style';

export interface ComponentToken extends TreeSharedToken {}

interface TreeSelectToken extends FullToken<'TreeSelect'> {
  treePrefixCls: string;
}

FAQ

How to get parent node in onChange?

We don't provide this since performance consideration. You can get by this way: https://codesandbox.io/s/get-parent-node-in-onchange-eb1608

Why sometimes customize Option cause scroll break?

You can ref Select FAQ.

Why loadData not trigger when searching?

In earlier version, loadData will be triggered when searching. But we got feedback that it will block network when inputting. So we change it to not trigger loadData when searching. But you can still handle async logic by filterTreeNode:

<TreeSelect
  filterTreeNode={(input, treeNode) => {
    const match = YOUR_LOGIC_HERE;

    if (match && !treeNode.isLeaf && !treeNode.children) {
      // Do some loading logic
    }

    return match;
  }}
/>

Why can't popup scroll horizontally?

Just turn off virtual scrolling, because the scrollWidth of the complete list cannot be accurately measured when virtual scrolling is turned on.

Shared native props

Tips: The following generic properties apply to most antd components; those not supported are described separately.

PropertyDescriptionTypeDefault
styleThe additional styleCSSProperties-
classNameThe additional css classstring-
rootClassNameClassName on the root elementstring-
autoFocusAuto focus when component mounted, only effective for focusable elements like forms, links, etc.booleanfalse

Install and reproduce an example

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

Use ConfigProvider and native App; configure dayjs locale separately. Each example lists its complete source files and additional pinned dependencies in View code. Example names select demos, not universal component props. See the resource setup guide for theme, locale and SSR.

Native type references

The source viewer includes unchanged native implementations and the following source declarations. Inherited types remain in their native packages. English source comments are preserved as code reference.

  • vendor/components/tree-select/index.tsx
  • vendor/components/tree-select/style/index.ts

Source and license

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

Original bilingual prose and executable examples are retained. Website-only embeds and token tables are expanded locally. Ant Design is MIT; separately listed dependency notices also apply. Upload previews block outbound requests and do not provide a backend.