跳转到内容

Tree 树形控件

何时使用

文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用 树控件 可以完整展现其中的层级关系,并具有展开收起选择等交互功能。

代码演示

基本

loading

拖动示例

loading

异步数据加载

loading

可搜索

loading

连接线

loading

自定义图标

loading

目录

loading

自定义展开/折叠图标

loading

虚拟滚动

loading

占据整行

loading

API

Tree props

参数说明类型默认值版本
allowDrop是否允许拖拽时放置在该节点({ dropNode, dropPosition }) => boolean-
autoExpandParent是否自动展开父节点booleanfalse
blockNode是否节点占据一行booleanfalse
checkable节点前添加 Checkbox 复选框booleanfalse
checkedKeys(v-model)(受控)选中复选框的树节点(注意:父子节点有关联,如果传入父节点 key,则子节点自动选中;相应当子节点 key 都传入,父节点也自动选中。当设置 checkablecheckStrictly,它是一个有checkedhalfChecked属性的对象,并且父子节点的选中与否不再关联string[] | {checked: string[], halfChecked: string[]}[]
checkStrictlycheckable 状态下节点选择完全受控(父子节点选中状态不再关联)booleanfalse
defaultExpandAll默认展开所有树节点booleanfalse
defaultExpandParent默认展开父节点booleantrue
disabled将树禁用booleanfalse
draggable设置节点可拖拽,可以通过 icon: false 关闭拖拽提示图标boolean | ((node: DataNode) => boolean) | { icon?: VNode | false, nodeDraggable?: (node: DataNode) => boolean }falseconfig: 4.17.0
expandedKeys(v-model)(受控)展开指定的树节点string[][]
fieldNames自定义节点 title、key、children 的字段object{ title: title, key: key, children: children }4.17.0
filterTreeNode按需筛选树节点(高亮),返回 truefunction(node)-
height设置虚拟滚动容器高度,设置后内部节点不再支持横向滚动number-
icon在标题之前插入自定义图标。需要设置 showIcon 为 trueVNode | (props) => VNode-
loadData异步加载数据function(node)-
loadedKeys(受控)已经加载的节点,需要配合 loadData 使用string[][]
multiple支持点选多个节点(节点本身)booleanfalse
rootStyle添加在 Tree 最外层的 styleCSSProperties-4.20.0
selectable是否可选中booleantrue
selectedKeys(v-model)(受控)设置选中的树节点,多选需设置 multiple 为 truestring[]-
showIcon控制是否展示 icon 节点,没有默认样式booleanfalse
showLine是否展示连接线boolean | { showLeafIcon: VNode | ((props: AntTreeNodeProps) => VNode) }false
switcherIcon自定义树节点的展开/折叠图标(带有默认 rotate 角度样式)VNode | ((props: AntTreeNodeProps) => VNode)-renderProps: 4.20.0
switcherLoadingIcon自定义树节点的加载图标VNode-5.20.0
titleRender自定义渲染节点(nodeData) => VNode-4.5.0
treeDatatreeNodes 数据,如果设置则不需要手动构造 TreeNode 节点(key 在整个树范围内唯一)array<{key, title, children, [disabled, selectable]}>-
virtual设置 false 时关闭虚拟滚动booleantrue4.1.0
onCheck点击复选框触发function(checkedKeys, e:{checked: boolean, checkedNodes, node, event, halfCheckedKeys})-
onDragenddragend 触发时调用function({event, node})-
onDragenterdragenter 触发时调用function({event, node, expandedKeys})-
onDragleavedragleave 触发时调用function({event, node})-
onDragoverdragover 触发时调用function({event, node})-
onDragstart开始拖拽时调用function({event, node})-
onDropdrop 触发时调用function({event, node, dragNode, dragNodesKeys})-
onExpand展开/收起节点时触发function(expandedKeys, {expanded: boolean, node})-
onLoad节点加载完毕时触发function(loadedKeys, {event, node})-
onRightClick响应右键点击function({event, node})-
onSelect点击树节点触发function(selectedKeys, e:{selected: boolean, selectedNodes, node, event})-

TreeNode props

参数说明类型默认值
checkable当树为 checkable 时,设置独立节点是否展示 Checkboxboolean-
disableCheckbox禁掉 checkboxbooleanfalse
disabled禁掉响应booleanfalse
icon自定义图标。可接收组件,props 为当前节点 propsVNode | (props) => VNode-
isLeaf设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点boolean-
key被树的 (default)ExpandedKeys / (default)CheckedKeys / (default)SelectedKeys 属性所用。注意:整个树范围内的所有节点的 key 值不能重复!string(内部计算出的节点位置)
selectable设置节点是否可被选中booleantrue
title标题VNode---

DirectoryTree props

参数说明类型默认值
expandAction目录展开逻辑,可选:false | click | doubleClickstring | booleanclick

Tree 方法

名称说明
scrollTo({ key: string | number; align?: 'top' | 'bottom' | 'auto'; offset?: number })虚拟滚动下,滚动到指定 key 条目

FAQ

defaultExpandAll 在异步加载数据时为何不生效?

default 前缀属性只有在初始化时生效,因而异步加载数据时 defaultExpandAll 已经执行完成。你可以通过受控 expandedKeys 或者在数据加载完成后渲染 Tree 来实现全部展开。

虚拟滚动的限制

虚拟滚动通过在仅渲染可视区域的元素来提升渲染性能。但是同时由于不会渲染所有节点,所以无法自动拓转横向宽度(比如超长 title 的横向滚动条)。

disabled 节点在树中的关系是什么?

Tree 通过传导方式进行数据变更。无论是展开还是勾选,它都会从变更的节点开始向上、向下传导变化,直到遍历的当前节点是 disabled 时停止。因而如果控制的节点本身为 disabled 时,那么它只会修改本身而不会影响其他节点。举例来说,一个父节点包含 3 个子节点,其中一个为 disabled 状态。那么勾选父节点,只会影响其余两个子节点变成勾选状态。勾选两个子节点后,无论 disabled 节点什么状态,父节点都会变成勾选状态。

这种传导终止的方式是为了防止通过勾选子节点使得 disabled 父节点变成勾选状态,而用户无法直接勾选 disabled 父节点更改其状态导致的交互矛盾。如果你有着自己的传导需求,可以通过 checkStrictly 自定义勾选逻辑。

基于 MIT 许可发布