开发指南
何时使用
文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用树控件
可以完整展现其中的层级关系,并具有展开收起选择等交互功能。
文件夹、组织架构、生物分类、国家地区等等,世间万物的大多数结构都是树形结构。使用树控件
可以完整展现其中的层级关系,并具有展开收起选择等交互功能。
最简单的用法,展示可展开,可选中,可勾选,可编辑,可右键,禁用,禁用勾选,默认展开,默认选中,默认勾选等功能。
使用 dataSource 生成树结构,除设置 key, label, children 属性外,还可传入 TreeNode 的其他属性,包括 selectable,disabled,checkable, checkboxDisabled, isLeaf 等。
展示 Tree 组件带线的样式外观。
展示父子节点选中是否关联的用法。
展示可搜索的树。
点击展开节点,动态加载数据。
将节点拖拽到其他节点内部或前后。
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
children | 树节点 | ReactNode | - |
dataSource | 数据源,该属性优先级高于 children | Array | - |
showLine | 是否显示树的线 | Boolean | false |
selectable | 是否支持选中节点 | Boolean | true |
selectedKeys | (用于受控)当前选中节点 key 的数组 | Array<String> | - |
defaultSelectedKeys | (用于非受控)默认选中节点 key 的数组 | Array<String> | [] |
onSelect | 选中或取消选中节点时触发的回调函数 签名: Function(selectedKeys: Array, extra: Object) => void 参数: selectedKeys: {Array} 选中节点key的数组 extra: {Object} 额外参数 extra.selectedNodes: {Array} 选中节点的数组 extra.node: {Object} 当前操作的节点 extra.selected: {Boolean} 当前操作是否是选中 | Function | func.noop |
multiple | 是否支持多选 | Boolean | false |
checkable | 是否支持勾选节点的复选框 | Boolean | false |
checkedKeys | (用于受控)当前勾选复选框节点 key 的数组或 {checked: Array, indeterminate: Array} 的对象 | Array<String>/Object | - |
defaultCheckedKeys | (用于非受控)默认勾选复选框节点 key 的数组 | Array<String> | [] |
checkStrictly | 勾选节点复选框是否完全受控(父子节点选中状态不再关联) | Boolean | false |
checkedStrategy | 定义选中时回填的方式 可选值: 'all'(返回所有选中的节点) 'parent'(父子节点都选中时只返回父节点) 'child'(父子节点都选中时只返回子节点) | Enum | 'all' |
onCheck | 勾选或取消勾选复选框时触发的回调函数 签名: Function(checkedKeys: Array, extra: Object) => void 参数: checkedKeys: {Array} 勾选复选框节点key的数组 extra: {Object} 额外参数 extra.checkedNodes: {Array} 勾选复选框节点的数组 extra.checkedNodesPositions: {Array} 包含有勾选复选框节点和其位置的对象的数组 extra.indeterminateKeys: {Array} 半选复选框节点 key 的数组 extra.node: {Object} 当前操作的节点 extra.checked: {Boolean} 当前操作是否是勾选 | Function | func.noop |
expandedKeys | (用于受控)当前展开的节点 key 的数组 | Array<String> | - |
defaultExpandedKeys | (用于非受控)默认展开的节点 key 的数组 | Array<String> | [] |
defaultExpandAll | 是否默认展开所有节点 | Boolean | false |
autoExpandParent | 是否自动展开父节点 | Boolean | true |
onExpand | 展开或收起节点时触发的回调函数 签名: Function(expandedKeys: Array, extra: Object) => void 参数: expandedKeys: {Array} 展开的节点key的数组 extra: {Object} 额外参数 extra.node: {Object} 当前操作的节点 extra.expanded: {Boolean} 当前操作是否是展开 | Function | func.noop |
editable | 是否支持编辑节点内容 | Boolean | false |
onEditFinish | 编辑节点内容完成时触发的回调函数 签名: Function(key: String, label: String, node: Object) => void 参数: key: {String} 编辑节点的 key label: {String} 编辑节点完成时节点的文本 node: {Object} 当前编辑的节点 | Function | func.noop |
draggable | 是否支持拖拽节点 | Boolean | false |
onDragStart | 开始拖拽节点时触发的回调函数 签名: Function(info: Object) => void 参数: info: {Object} 拖拽信息 info.event: {Object} 事件对象 info.node: {Object} 拖拽的节点 | Function | func.noop |
onDragEnter | 拖拽节点进入目标节点时触发的回调函数 签名: Function(info: Object) => void 参数: info: {Object} 拖拽信息 info.event: {Object} 事件对象 info.node: {Object} 目标节点 info.expandedKeys: {Array} 当前展开的节点key的数组 | Function | func.noop |
onDragOver | 拖拽节点在目标节点上移动的时候触发的回调函数 签名: Function(info: Object) => void 参数: info: {Object} 拖拽信息 info.event: {Object} 事件对象 info.node: {Object} 目标节点 | Function | func.noop |
onDragLeave | 拖拽节点离开目标节点时触发的回调函数 签名: Function(info: Object) => void 参数: info: {Object} 拖拽信息 info.event: {Object} 事件对象 info.node: {Object} 目标节点 | Function | func.noop |
onDragEnd | 拖拽节点拖拽结束时触发的回调函数 签名: Function(info: Object) => void 参数: info: {Object} 拖拽信息 info.event: {Object} 事件对象 info.node: {Object} 目标节点 | Function | func.noop |
onDrop | 拖拽节点放入目标节点内或前后触发的回调函数 签名: Function(info: Object) => void 参数: info: {Object} 拖拽信息 info.event: {Object} 事件对象 info.node: {Object} 目标节点 info.dragNode: {Object} 拖拽的节点 info.dragNodesKeys: {Array} 拖拽的节点和其子节点 key 的数组 info.dropPosition: {Number} 放置位置,-1代表当前节点前,0代表当前节点里,1代表当前节点后 | Function | func.noop |
canDrop | 节点是否可被作为拖拽的目标节点 签名: Function(info: Object) => Boolean 参数: info: {Object} 拖拽信息 info.node: {Object} 目标节点 info.dragNode: {Object} 拖拽的节点 info.dragNodesKeys: {Array} 拖拽的节点和其子节点 key 的数组 info.dropPosition: {Number} 放置位置,-1代表当前节点前,0代表当前节点里,1代表当前节点后 返回值: {Boolean} 是否可以被当作目标节点 | Function | () => true |
loadData | 异步加载数据的函数 签名: Function(node: Object) => void 参数: node: {Object} 被点击展开的节点 | Function | - |
filterTreeNode | 按需筛选高亮节点 签名: Function(node: Object) => Boolean 参数: node: {Object} 待筛选的节点 返回值: {Boolean} 是否被筛选中 | Function | - |
onRightClick | 右键点击节点时触发的回调函数 签名: Function(info: Object) => void 参数: info: {Object} 信息对象 info.event: {Object} 事件对象 info.node: {Object} 点击的节点 | Function | func.noop |
isLabelBlock | 设置节点是否占满剩余空间,一般用于统一在各节点右侧添加元素(借助 flex 实现,暂时只支持 ie10+) | Boolean | false |
isNodeBlock | 设置节点是否占满一行 | Boolean/Object | false |
animation | 是否开启展开收起动画 | Boolean | true |
focusedKey | 当前获得焦点的子菜单或菜单项 key 值 | String | - |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
children | 树节点 | ReactNode | - |
label | 节点文本内容 | ReactNode | '---' |
selectable | 单独设置是否支持选中,覆盖 Tree 的 selectable | Boolean | - |
checkable | 单独设置是否出现复选框,覆盖 Tree 的 checkable | Boolean | - |
editable | 单独设置是否支持编辑,覆盖 Tree 的 editable | Boolean | - |
draggable | 单独设置是否支持拖拽,覆盖 Tree 的 draggable | Boolean | - |
disabled | 是否禁止节点响应 | Boolean | false |
checkboxDisabled | 是否禁止勾选节点复选框 | Boolean | false |
isLeaf | 是否是叶子节点,设置loadData时生效 | Boolean | false |
可以为 Tree.Node 设置 key
值:<TreeNode key="102894" label="女装" />
,一般为数据的 id 值,但必需保证其全局唯一性,key
的默认值为 Tree 内部计算出的位置字符串。