folder-文件夹布局
文件系统样式层级布局
专用于文件系统类结构的文件夹布局算法,使用正交连接,可调整连接点偏移,支持文件和文件夹的自定义节点渲染。
功能概述
此示例展示了文件夹布局算法,它专门用于展示类似文件系统的层级结构。布局将父节点和子节点以类似文件夹树的形式排列,连接线从父节点的指定位置出发连接到子节点。支持动态调整连接点的偏移量,实现精确的线条位置控制。
核心特性实现
文件夹布局配置
使用 folder 布局类型:
const graphOptions: RGOptions = {
layout: {
layoutName: 'folder',
from: 'left',
treeNodeGapH: 20,
treeNodeGapV: 10
},
defaultNodeShape: RGNodeShape.rect,
defaultLineShape: RGLineShape.StandardOrthogonal,
defaultPolyLineRadius: 4,
defaultExpandHolderPosition: 'right',
reLayoutWhenExpandedOrCollapsed: true
};
文件夹布局从左到右展开,使用正交线条连接节点。
连接点偏移控制
动态调整线条起点相对于连接点的偏移量:
const [fromOffsetX, setFromOffsetX] = useState(40);
myJsonData.lines.forEach((line, index) => {
line.fromJunctionPoint = RGJunctionPoint.bottom;
line.fromJunctionPointOffsetX = fromOffsetX;
line.toJunctionPoint = RGJunctionPoint.left;
});
fromJunctionPointOffsetX 控制线条在水平方向上的偏移。
响应式偏移更新
使用 useEffect 监听偏移量变化并更新线条:
const updateMyData = () => {
graphInstance.getLines().forEach(line => {
graphInstance.updateLine(line, {
fromJunctionPointOffsetX: fromOffsetX
});
});
};
useEffect(() => {
updateMyData();
}, [fromOffsetX]);
滑块调整偏移量时,所有线条会实时更新。
自定义节点渲染
根据节点是否有子节点显示不同的图标:
<RGSlotOnNode>
{({ node }: RGNodeSlotProps) => {
return (
<div className={`w-full h-full flex place-items-center gap-2 p-2 ${node.rgChildrenSize > 0 ? 'bg-gray-100 rounded' : ''}`}>
{
node.rgChildrenSize > 0
? <FolderOpen className="w-4 h-4 text-blue-700" />
: <div className="w-4 h-4 "></div>
}
<div>{node.text}</div>
</div>
);
}}
</RGSlotOnNode>
文件夹节点显示文件夹图标,文件节点显示空白占位符。
层级数据结构
使用模拟的文件系统数据:
const myJsonData: RGJsonData = await mockDataApi();
myJsonData.lines.forEach((line, index) => {
if (!line.id) {
line.id = `l${index + 1}`;
}
});
数据包含文件夹和文件的层级关系。
偏移量滑块
提供直观的偏移量控制:
<input
type="range"
value={fromOffsetX}
min={-100}
step={5}
max={200"
onChange={(e) => { setFromOffsetX(Number(e.target.value)); }}
/>
范围从 -100 到 200,步长为 5,提供精细的控制。
正交线条样式
使用带圆角的正交线条:
defaultLineShape: RGLineShape.StandardOrthogonal,
defaultPolyLineRadius: 4
线条以直角连接,拐角处有 4px 的圆角,更加美观。
创意使用场景
文件浏览器
创建可视化文件浏览器,展示目录结构的层次关系。比传统树形视图更直观。
代码依赖分析
展示软件项目的模块依赖关系,类似文件夹的结构显示代码组织。
组织架构树
展示公司或组织的部门层级,从总部到分支机构的结构。
网站地图
可视化网站的结构,从主页到各个页面和子页面的层级关系。
分类目录
电商网站的分类系统,从大类到小类到具体商品的层级展示。
知识库组织
展示知识库的文档组织结构,帮助用户理解内容分类。
设施层级管理
展示建筑物、楼层、房间的层级关系,用于设施管理。
产品配置器
展示产品的可选配置和选项的层级关系,帮助用户理解配置选项。
菜单导航设计
设计应用程序或网站的菜单结构,可视化导航层级。
任务分解
项目管理中展示任务的层级分解,从主任务到子任务。
决策树可视化
展示决策树的分支结构,每个节点代表一个决策点。
分类学层级
生物学分类学中展示物种的层级关系,从界到种。
数据库模式
展示数据库表和关系的层级结构,帮助理解数据模型。