---
title: Tree - 树形控件
path: /tree
nav:
  order: 1
  title: 桌面组件
  path: /design
group:
  order: 4
  title: 数据展示
  path: /dataShow
---

用于承载同一层级下不同页面或类别的组件，方便用户在同一个页面框架下进行快速切换。

## 基础树

可承载存在父子关系的内容的展示，父节点带有展开/折叠操作，提供单个节点的选中标记。常用于系统目录结构、组织架构的展示。

<code src='./demos/basic.tsx' >

## 带多选框的树

在基础树结构上提供多选框控件，当需要对多个节点进行选择时使用。

<code src='./demos/checkbox.tsx' >

## 带操作树

在基础树结构上提供操作功能，当需要对节点进行操作时使用。

<code src='./demos/edit.tsx' >

## 自定义图标树

可以对父节点上展开/折叠的图标进行自定义设计。当需要图标与信息名的含义匹配时使用，如文件夹的概念。

<code src='./demos/icon.tsx' >

## 带连接线的树

将树中的父节点与其层级内的子节点进行连线。该用法针对子项层级较深且较多的情况，需要更明确表示从属关系。

<code src='./demos/line.tsx' >

## 异步加载树

<code src='./demos/load.tsx' >

## 可拖拽的树

树中的节点可自由的拖拽

<code src='./demos/drag.tsx' >

## API

### Tree props

| 参数                | 说明                                                                                                                                                                                                                                                   | 类型                                                                                                                         | 默认值                                               | 版本             |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ---------------- |
| allowDrop           | 是否允许拖拽时放置在该节点                                                                                                                                                                                                                             | ({ dropNode, dropPosition }) => boolean                                                                                      | -                                                    |                  |
| autoExpandParent    | 是否自动展开父节点                                                                                                                                                                                                                                     | boolean                                                                                                                      | false                                                |                  |
| blockNode           | 是否节点占据一行                                                                                                                                                                                                                                       | boolean                                                                                                                      | false                                                |                  |
| checkable           | 节点前添加 Checkbox 复选框                                                                                                                                                                                                                             | boolean                                                                                                                      | false                                                |                  |
| checkedKeys         | （受控）选中复选框的树节点（注意：父子节点有关联，如果传入父节点 key，则子节点自动选中；相应当子节点 key 都传入，父节点也自动选中。当设置 `checkable` 和 `checkStrictly`，它是一个有`checked`和`halfChecked`属性的对象，并且父子节点的选中与否不再关联 | string\[] \| {checked: string\[], halfChecked: string\[]}                                                                    | \[]                                                  |                  |
| checkStrictly       | checkable 状态下节点选择完全受控（父子节点选中状态不再关联）                                                                                                                                                                                           | boolean                                                                                                                      | false                                                |                  |
| defaultCheckedKeys  | 默认选中复选框的树节点                                                                                                                                                                                                                                 | string\[]                                                                                                                    | \[]                                                  |                  |
| defaultExpandAll    | 默认展开所有树节点                                                                                                                                                                                                                                     | boolean                                                                                                                      | false                                                |                  |
| defaultExpandedKeys | 默认展开指定的树节点                                                                                                                                                                                                                                   | string\[]                                                                                                                    | \[]                                                  |                  |
| defaultExpandParent | 默认展开父节点                                                                                                                                                                                                                                         | boolean                                                                                                                      | true                                                 |                  |
| defaultSelectedKeys | 默认选中的树节点                                                                                                                                                                                                                                       | string\[]                                                                                                                    | \[]                                                  |                  |
| disabled            | 将树禁用                                                                                                                                                                                                                                               | boolean                                                                                                                      | false                                                |                  |
| draggable           | 设置节点可拖拽，可以通过 `icon: false` 关闭拖拽提示图标                                                                                                                                                                                                | boolean \| ((node: DataNode) => boolean) \| { icon?: React.ReactNode \| false, nodeDraggable?: (node: DataNode) => boolean } | false                                                | `config`: 4.17.0 |
| expandedKeys        | （受控）展开指定的树节点                                                                                                                                                                                                                               | string\[]                                                                                                                    | \[]                                                  |                  |
| fieldNames          | 自定义节点 title、key、children 的字段                                                                                                                                                                                                                 | object                                                                                                                       | { title: `title`, key: `key`, children: `children` } | 4.17.0           |
| filterTreeNode      | 按需筛选树节点（高亮），返回 true                                                                                                                                                                                                                      | function(node)                                                                                                               | -                                                    |                  |
| height              | 设置虚拟滚动容器高度，设置后内部节点不再支持横向滚动                                                                                                                                                                                                   | number                                                                                                                       | -                                                    |                  |
| icon                | 自定义树节点图标。                                                                                                                                                                                                                                     | ReactNode \| (props) => ReactNode                                                                                            | -                                                    |                  |
| loadData            | 异步加载数据                                                                                                                                                                                                                                           | function(node)                                                                                                               | -                                                    |                  |
| loadedKeys          | （受控）已经加载的节点，需要配合 `loadData` 使用                                                                                                                                                                                                       | string\[]                                                                                                                    | \[]                                                  |                  |
| multiple            | 支持点选多个节点（节点本身）                                                                                                                                                                                                                           | boolean                                                                                                                      | false                                                |                  |
| selectable          | 是否可选中                                                                                                                                                                                                                                             | boolean                                                                                                                      | true                                                 |                  |
| selectedKeys        | （受控）设置选中的树节点                                                                                                                                                                                                                               | string\[]                                                                                                                    | -                                                    |                  |
| showIcon            | 是否展示 TreeNode title 前的图标，没有默认样式，如设置为 true，需要自行定义图标相关样式                                                                                                                                                                | boolean                                                                                                                      | false                                                |                  |
| showLine            | 是否展示连接线                                                                                                                                                                                                                                         | boolean \| {showLeafIcon: boolean}                                                                                           | false                                                |                  |
| switcherIcon        | 自定义树节点的展开/折叠图标                                                                                                                                                                                                                            | ReactNode                                                                                                                    | -                                                    |                  |
| titleRender         | 自定义渲染节点                                                                                                                                                                                                                                         | (nodeData) => ReactNode                                                                                                      | -                                                    | 4.5.0            |
| treeData            | treeNodes 数据，如果设置则不需要手动构造 TreeNode 节点（key 在整个树范围内唯一）                                                                                                                                                                       | array&lt;{key, title, children, \[disabled, selectable]}>                                                                    | -                                                    |                  |
| virtual             | 设置 false 时关闭虚拟滚动                                                                                                                                                                                                                              | boolean                                                                                                                      | true                                                 | 4.1.0            |
| onCheck             | 点击复选框触发                                                                                                                                                                                                                                         | function(checkedKeys, e:{checked: bool, checkedNodes, node, event, halfCheckedKeys})                                         | -                                                    |                  |
| onDragEnd           | dragend 触发时调用                                                                                                                                                                                                                                     | function({event, node})                                                                                                      | -                                                    |                  |
| onDragEnter         | dragenter 触发时调用                                                                                                                                                                                                                                   | function({event, node, expandedKeys})                                                                                        | -                                                    |                  |
| onDragLeave         | dragleave 触发时调用                                                                                                                                                                                                                                   | function({event, node})                                                                                                      | -                                                    |                  |
| onDragOver          | dragover 触发时调用                                                                                                                                                                                                                                    | function({event, node})                                                                                                      | -                                                    |                  |
| onDragStart         | 开始拖拽时调用                                                                                                                                                                                                                                         | function({event, node})                                                                                                      | -                                                    |                  |
| onDrop              | drop 触发时调用                                                                                                                                                                                                                                        | function({event, node, dragNode, dragNodesKeys})                                                                             | -                                                    |                  |
| onExpand            | 展开/收起节点时触发                                                                                                                                                                                                                                    | function(expandedKeys, {expanded: bool, node})                                                                               | -                                                    |                  |
| onLoad              | 节点加载完毕时触发                                                                                                                                                                                                                                     | function(loadedKeys, {event, node})                                                                                          | -                                                    |                  |
| onRightClick        | 响应右键点击                                                                                                                                                                                                                                           | function({event, node})                                                                                                      | -                                                    |                  |
| onSelect            | 点击树节点触发                                                                                                                                                                                                                                         | function(selectedKeys, e:{selected: bool, selectedNodes, node, event})                                                       | -                                                    |                  |
| editable            | 编辑按钮                                                                                                                                                                                                                                               | boolean\|`EditableType`                                                                                                      | false                                                |                  |
| deleteable          | 删除按钮                                                                                                                                                                                                                                               | boolean\|`DeleteableType`                                                                                                    | false                                                |                  |
| onTreeDataChange    | 数据改变回调                                                                                                                                                                                                                                           | function(node)                                                                                                               | -                                                    |

#### EditableType

| 参数                | 说明           | 类型                                 | 默认值 |
| ------------------- | -------------- | ------------------------------------ | ------ |
| show                | 显示编辑按钮   | boolean                              | false  |
| beforeEnterEditMode | 进入编辑操作前 | `(NodeData)=>Promise<boolean>`       | -      |
| afterEnterEditMode  | 进入编辑操作后 | `(NodeData)=>void`                   | -      |
| beforeExitEditMode  | 离开编辑操作前 | `(NodeData,value)=>Promise<boolean>` | -      |
| afterExitEditMode   | 离开编辑操作后 | `(NodeData,value)=>void`             | -      |

#### DeleteableType

| 参数         | 说明         | 类型                           | 默认值 |
| ------------ | ------------ | ------------------------------ | ------ |
| show         | 显示删除按钮 | boolean                        | false  |
| beforeDelete | 删除操作前   | `(NodeData)=>Promise<boolean>` | -      |
| afterDelete  | 删除操作后   | `(NodeData)=>void`             | -      |
