Loading...
@ant-design/graphs 是基于 G6 精心打造的 React 组件库,旨在为开发者提供一套直接可用于业务的 “一图一做” 封装,同时保持 G6 能力同步,让关系图集成变得更加简单、高效。
如何理解 “一图一做”?
“一图” 指的是特定业务场景(如思维导图、组织结构图、流程图等)量身定制的图组件,“一做” 则强调了这种封装是即拿即用的,用户不再需要从零开始搭建,只需根据业务场景选择对应的图组件,并可能通过简单的配置调整即可满足需求。
但对于需要深度定制化的复杂场景,推荐使用 G6 直接开发,充分利用其底层强大的功能与灵活性。
在深入了解关系图用法之前,我们需要了解以下术语:
Tips: 以下通用属性适用于 Graphs 组件,不支持的组件会单独说明。
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
data | 数据。关于图数据的详细说明,请参考 G6 - 核心概念 - 数据 | GraphData | - |
node | 节点,支持 G6 内置节点。关于节点的详细说明,请参考 G6 - 核心概念 - 元素 - 节点 | NodeOptions | - |
edge | 边,支持 G6 内置边。关于边的详细说明,请参考 G6 - 核心概念 - 元素 - 边 | EdgeOptions | - |
combo | Combo,支持 G6 内置 Combo。关于 Combo 的详细说明,请参考 G6 - 核心概念 - 元素 - 组合 | ComboOptions | - |
layout | 布局,支持 G6 内置布局。关于图布局的详细说明,请参考 G6 - 核心概念 - 布局 | 组件内查看 | - |
behaviors | 设置用户交互事件 | 交互 Behavior | - |
plugins | 设置插件 | 插件 Plugin | - |
transforms | 设置数据处理 | 数据处理 Transform | - |
theme | 主题 | light | dark | string | - |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
containerStyle | 配置图表容器的样式,接受一个包含 CSS 属性和值的对象 | React.CSSProperties | - |
containerAttributes | 为图表容器添加自定义的 HTML 属性 | Record<string, any> | - |
className | 添加在组件最外层的 className | string | - |
loading | 表示图表是否处于加载状态 | boolean | false |
loadingTemplate | 自定义加载模板,当图表加载时显示的元素 | React.ReactElement | - |
errorTemplate | 自定义错误模板,当图表出错时调用的函数,返回显示的错误信息 | (e: Error) => React.ReactNode | - |
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
animation | 启用或关闭全局动画,为动画配置项时,会启用动画,并将该动画配置作为全局动画的基础配置。关于动画的详细说明,请参考 G6 - 核心概念 - 动画 | boolean | AnimationEffectTiming | - |
autoFit | 是否自动适应 | view | center | - |
autoResize | 是否自动调整画布大小 | boolean | false |
background | 画布背景色 | string | - |
cursor | 指针样式 | Cursor | - |
devicePixelRatio | 设备像素比 | number | - |
width | 画布宽度 | number | - |
height | 画布高度 | number | - |
zoom | 缩放比例 | number | 1 |
zoomRange | 缩放范围 | [number, number] | [0.01, 10] |
padding | 画布内边距,通常在自适应时,会根据内边距进行适配 | number | number[] | - |
renderer | 获取渲染器 | (layer: background | main | label | transient ) =>IRenderer | - |
rotation | 旋转角度 | number | 0 |
定义在图的不同生命周期阶段执行特定的回调。
交互(Behaviors)指的是用户与画布及元素间的一系列操作,如拖拽、缩放、平移和选择等。这些交互方式增强了用户从图表中获取信息的直观性。
类型定义:BehaviorOptions[] | ((existingBehaviors: BehaviorOptions[]) => BehaviorOptions[])
默认情况下,zoom-canvas
(缩放画布)和 drag-canvas
(拖拽画布)交互是开启的。若需其他交互方式,则需进行额外配置。
Behavior 可定义为静态数组或动态函数:
import { MindMap } from '@ant-design/graphs';export default () => {// 静态数组形式const behaviors = ['zoom-canvas', { type: 'drag-canvas', direction: 'x' }];// 动态函数形式const dynamicBehaviors = (existingBehaviors) => {// console.log(existingBehaviors); 👉 [{ key: 'zoom-canvas', type: 'zoom-canvas' }, { key: 'drag-canvas', type: 'drag-canvas' }]return [...existingBehaviors, { type: 'click-select' /* 参数 */ }];};return <MindMap behaviors={behaviors /** or dynamicBehaviors **/} />;};
支持 G6 提供的所有交互。以下是部分内置交互的简介,详情可参考 G6 - 核心概念 - 交互:
若内置交互无法满足特定需求,还可根据 G6 - 自定义交互 教程来自定义交互。
此外,Graphs 也提供了一系列交互。
用途: 当用户将鼠标悬停在一个节点或边上时,高亮该节点或边以及其直接关联的链路(上下游路径)。该交互常用于突出显示网络结构中的路径,帮助用户快速分析链路关系。
配置项: 同 G6 - Behavior - HoverActivate 配置项。
用途: 鼠标悬停时,高亮与当前节点或边直接邻接的元素,帮助用户快速理解元素的局部上下文。
配置项: 同 G6 - Behavior - HoverActivate 配置项。
数据处理 (Transforms) 用于对用户输入数据进行处理。这种转换只会影响渲染数据,原始输入数据始终保持不变。
类型定义:TransformOptions[] | (existingTransforms: TransformOptions[]) => TransformOptions[]
Transform 可定义为静态数组或动态函数:
import { MindMap } from '@ant-design/graphs';export default () => {// 静态数组形式const transforms = [{ type: 'assign-color-by-branch' /* 参数 */ }, { type: 'map-edge-line-width' /* 参数 */ }];// 动态函数形式const dynamicTransforms = (existingTransforms) => {return [...existingTransforms, { type: 'arrange-edge-z-index' /* 参数 */ }];};return <MindMap transforms={transforms /** or dynamicTransforms**/} />;};
支持 G6 提供的所有数据处理。内置数据处理列表请查看 G6 - API - 数据转换。
另外,Graphs 也提供了一系列数据处理。
扩展 | 注册类型 | 描述 | 适用场景 | |
---|---|---|---|---|
TranslateReactNodeOrigin | translate-react-node-origin | 调整 React 节点原点,从左上调整成中心 | 所有图类型 | 配置项 |
CollapseExpandReactNode | collapse-expand-react-node | 折叠/展开 React 节点 | 所有图类型 | 配置项 |
AssignColorByBranch | assign-color-by-branch | 根据节点所在分支为节点分配颜色 | MindMap、IndentedTree、Fishbone | 配置项 |
ArrangeEdgeZIndex | arrange-edge-z-index | 调整边的层级 | IndentedTree、Fishbone | 配置项 |
MapEdgeLineWidth | map-edge-line-width | 调整边的描边宽度 | FlowDirectionGraph | 配置项 |
用途: 由于 React Node 默认原点位于左上角,与布局预期不符。通过调整偏移量 dx
和 dy
,将原点设置为节点中心。
用途: 用于实现 React 节点的子节点展开和收起功能。仅对 React 节点类型有效。通过为节点绑定副作用,控制其“展开/收起”行为。
配置项:
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
enable | 是否启用收起/展开功能 | boolean | ((data: NodeData) => boolean) | true |
trigger | 点击指定元素,触发节点收起/展开 | icon | node | HTMLElement | icon |
enable | 收起/展开指定方向上的邻居节点 - in : 前驱节点 - out : 后继节点 - both : 前驱和后继节点 | in | out | both | out |
iconType | 内置图标语法糖 | plus-minus | arrow-count | - |
iconRender | 渲染函数,用于自定义收起/展开图标,参数为 isCollapsed (当前节点是否已收起)和 data (节点数据),返回自定义图标 | (this: Graph, isCollapsed: boolean, data: NodeData) => React.ReactNode | - |
iconPlacement | 图标相对于节点的位置 | left | right | top | bottom | ((this: Graph, data: NodeData) => CardinalPlacement) | bottom |
iconOffsetX | 图标相对于节点的水平偏移量 | number | ((this: Graph, data: NodeData) => number) | 0 |
iconOffsetY | 图标相对于节点的垂直偏移量 | number | ((this: Graph, data: NodeData) => number) | 0 |
iconClassName | 指定图标的 CSS 类名 | string | - |
iconStyle | 指定图标的内联样式 | React.CSSProperties | {} |
refreshLayout | 每次收起/展开节点后,是否刷新布局 | boolean | false |
用途: 为树图中的分支分配颜色,有助于在逻辑分支或层级结构中增强视觉区分。
配置项:
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
colors | 色板 | string[] | ['#1783FF', '#F08F56', '#D580FF', '#00C9C9', '#7863FF', '#DB9D0D', '#60C42D', '#FF80CA', '#2491B3', '#17C76F'] |
用途: 调整边的 z-index 以优化渲染层次,避免边缘被遮挡或不清晰。常用于树图场景,配合 assign-color-by-branch
使用。
用途: 根据边的属性(如权重)动态调整其线宽,使图形信息表达更直观。
配置项:
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
(Required) value | 指定边的线宽值 | number | ((this: Graph, data: EdgeData) => number) | - |
minValue | 线宽的最小值 | number | ((data: EdgeData, edges: Record<ID, number>) => number) | - |
maxValue | 线宽的最大值 | number | ((data: EdgeData, edges: Record<ID, number>) => number) | - |
minLineWidth | 映射线宽的最小阈值 | number | ((data: EdgeData) => number) | 1 |
maxLineWidth | 映射线宽的最大阈值 | number | ((data: EdgeData) => number) | 10 |
scale | 线宽的映射函数或比例(支持线性、对数等变换) | linear | log | pow | sqrt | ((value: number, domain: [number, number], range: [number, number]) => number) | linear |
插件 (Plugin) 用于处理画布的渲染逻辑、额外组件渲染,例如在画布中额外挂载图形组件、实现撤销重做等功能。
类型定义:PluginOptions[] | ((existingPlugins: PluginOptions[]) => PluginOptions[])
Plugin 可定义为静态数组或动态函数:
import { MindMap } from '@ant-design/graphs';export default () => {// 静态数组形式const plugins = [{ type: 'minimap' /* 参数 */ }];// 动态函数形式const dynamicTransforms = (existingPlugins) => {// console.log(existingPlugins); 👉 []return [...existingPlugins, { type: 'minimap' /* 参数 */ }];};return <MindMap plugins={plugins /** or existingPlugins**/} />;};
支持 G6 的所有内置插件。内置插件列表请参考 G6 - API - 插件。