跳到主要内容

Tree

用于展示层级数据的树形视图组件。

来源:antd 重新导出,并增加了 VEF Hook 增强。完整文档:Ant Design Tree

基础用法

import { Tree } from '@vef-framework-react/components';
import type { TreeNode } from '@vef-framework-react/components';

const treeData: TreeNode[] = [
{
title: 'Parent 1',
key: '0-0',
children: [
{ title: 'Child 1-1', key: '0-0-0' },
{ title: 'Child 1-2', key: '0-0-1' },
],
},
];

export default function Demo() {
return <Tree treeData={treeData} defaultExpandAll />;
}

VEF 增强:useDataOptionsTree

从异步数据源加载树形数据,内置加载状态和搜索支持。数据获取相关的选项统一嵌套在 queryOptions 中(与 TanStack Query 的 useQuery 接受的形状相同),useDataOptionsTree 自身的选项与其平级。

import { Tree, useDataOptionsTree } from '@vef-framework-react/components';

async function fetchDepartments() {
const res = await fetch('/api/departments');
return res.json();
}

export default function Demo() {
const { treeProps, searchValue, setSearchValue } = useDataOptionsTree({
queryOptions: {
queryKey: ['departments'],
queryFn: fetchDepartments,
},
});

return (
<>
<input
value={searchValue}
onChange={(e) => setSearchValue(e.target.value)}
placeholder="Search..."
/>
<Tree {...treeProps} />
</>
);
}

useDataOptionsTree 选项

选项类型默认值说明
queryOptionsUseQueryOptions<TQueryFnData[], TData[], TParams>必填TanStack Query 选项(queryKeyqueryFnuseQuery 的其余选项)
onFetch(data: TData[]) => void数据获取完成后的回调
labelKeystring | (item: TData) => string"label"节点 label 的字段映射
valueKeystring | (item: TData) => Key"value"节点 value 的字段映射
disabledKeystring | (item: TData) => boolean | undefined"disabled"禁用状态的字段映射
descriptionKeystring | (item: TData) => string | undefined"description"节点说明文字的字段映射
childrenKeystring | (item: TData) => TData[] | undefined"children"嵌套子节点的字段映射(会递归转换)

每个 *Key 选项都可以是字符串路径(例如 "user.name")或提取函数。

useDataOptionsTree 返回值

字段类型说明
treePropsTreeProps<DataOptionWithPinyin>可直接展开的 props:treeData(搜索时过滤为匹配节点及其祖先)、fieldNamestitle: 'label'key: 'value'children)、showLine(不带叶子图标)、autoExpandParentblockNodefilterTreeNode
isFetchingboolean查询是否正在获取数据
searchValuestring当前搜索关键词
setSearchValue(value: string) => void设置搜索关键词——接到你自己的搜索输入框上;匹配时比较 label / description、其完整拼音及拼音首字母

其余属性请参阅 Ant Design Tree 文档