当前位置: 首页 > news >正文

AntV G6 基础元素详解(React版)

一、初识 AntV G6

AntV G6 是蚂蚁集团推出的专业级图可视化引擎,适合构建关系图谱、拓扑图、流程图等场景。相比其他图形库,G6 提供完整的布局算法交互体系 ,开发者在 10 分钟内即可搭建可交互的图应用。

技术特点速览:

  • 支持 Canvas / SVG 双渲染模式
  • 内置 10+ 图布局算法
  • 提供丰富的节点/边类型
  • 完善的文档和 React 示例

二、节点(Nodes)完全指南

2.1 节点的核心属性

interface Node {id: string;          // 必须!节点的唯一标识(类似身份证号)x?: number;          // 可选,X坐标(不设置则自动布局)y?: number;          // 可选,Y坐标label?: string;      // 显示的文字标签type?: string;       // 节点类型(默认圆形,可自定义)style?: {            // 样式配置fill?: string;     // 填充颜色stroke?: string;   // 边框颜色lineWidth?: number;// 边框粗细};// 其他自定义属性...
}
█ 关键规则:
  1. id必须且唯一 的,就像每个人的身份证号
  2. 如果多个节点使用相同id,会导致渲染异常
  3. 未设置x/y时,G6会自动计算布局位置

2.2 基础节点示例

// 正确的节点配置
const nodes = [{ id: 'A', label: '服务器' }, { id: 'B', x: 100, y: 200, type: 'rect' }
];// 错误的配置 ❌
const badNodes = [{ label: '节点1' }, // 缺少id{ id: 'A' },       // 重复id{ id: 'A' }
];
█ 在React中的使用示例:
function NodeDemo() {const data = {nodes: [{ id: 'home', label: '家庭电脑', type: 'circle' },{ id: 'cloud', label: '阿里云', type: 'rect' }],edges: [] // 暂时没有连接};return <G6Graph data={data} />;
}

三、边(Edges)完全指南

3.1 边的核心属性

interface Edge {source: string;      // 必须!起点节点idtarget: string;      // 必须!终点节点idlabel?: string;      // 边的文字说明type?: string;       // 边类型(直线/曲线等)style?: {            // 样式配置stroke?: string;   // 线条颜色lineWidth?: number;// 线条粗细lineDash?: number[];// 虚线样式};
}
█ 关键规则:
  1. sourcetarget必须指向已存在的节点id
  2. 如果引用了不存在的节点id,边将不会显示
  3. 边的方向由sourcetarget决定

3.2 基础边示例

// 正确的边配置
const edges = [{ source: 'A', target: 'B' },{ source: 'B', target: 'C', label: '100Mbps' }
];// 错误的配置 ❌
const badEdges = [{ source: 'A' },              // 缺少target{ source: 'X', target: 'Y' }, // X/Y节点不存在{ target: 'B' }               // 缺少source
];

2.3 边的连接原理

  节点A (id: 'server')[边:source指向'server',target指向'client']↓节点B (id: 'client')
█ 在React中的使用示例:
function EdgeDemo() {const data = {nodes: [{ id: 'router', label: '路由器' },{ id: 'pc', label: '办公电脑' }],edges: [{ source: 'router', target: 'pc',label: '有线连接',style: {stroke: '#1890ff',lineDash: [5, 5] // 虚线效果}}]};return <G6Graph data={data} />;
}

四、完整可运行示例

4.1 家庭网络拓扑案例

import React from 'react';
import G6 from '@antv/g6';function HomeNetwork() {const containerRef = React.useRef(null);React.useEffect(() => {if (!containerRef.current) return;// 创建图实例const graph = new G6.Graph({container: containerRef.current,width: 800,height: 500,defaultNode: {size: 40,style: {fill: '#e6f7ff',stroke: '#1890ff'}},defaultEdge: {style: {stroke: '#91d5ff',lineWidth: 2}}});// 网络拓扑数据const data = {nodes: [{ id: 'modem', label: '光猫' },{ id: 'router', label: '主路由器' },{ id: 'pc1', label: '书房电脑' },{ id: 'pc2', label: '卧室电脑' }],edges: [{ source: 'modem', target: 'router' },{ source: 'router', target: 'pc1' },{ source: 'router', target: 'pc2' }]};graph.data(data);graph.render();return () => graph.destroy();}, []);return (<div><h3>家庭网络拓扑图</h3><div ref={containerRef} style={{ border: '1px solid #f0f0f0',borderRadius: '8px',margin: '20px 0'}} /></div>);
}

如图所示:

一、初识 AntV G6

AntV G6 是蚂蚁集团推出的专业级图可视化引擎,适合构建关系图谱、拓扑图、流程图等场景。相比其他图形库,G6 提供完整的布局算法交互体系 ,开发者在 10 分钟内即可搭建可交互的图应用。

技术特点速览:

  • 支持 Canvas / SVG 双渲染模式
  • 内置 10+ 图布局算法
  • 提供丰富的节点/边类型
  • 完善的文档和 React 示例

二、节点(Nodes)完全指南

2.1 节点的核心属性

interface Node {id: string;          // 必须!节点的唯一标识(类似身份证号)x?: number;          // 可选,X坐标(不设置则自动布局)y?: number;          // 可选,Y坐标label?: string;      // 显示的文字标签type?: string;       // 节点类型(默认圆形,可自定义)style?: {            // 样式配置fill?: string;     // 填充颜色stroke?: string;   // 边框颜色lineWidth?: number;// 边框粗细};// 其他自定义属性...
}
█ 关键规则:
  1. id?是必须且唯一 的,就像每个人的身份证号
  2. 如果多个节点使用相同id,会导致渲染异常
  3. 未设置x/y时,G6会自动计算布局位置

2.2 基础节点示例

// 正确的节点配置
const nodes = [{ id: 'A', label: '服务器' }, { id: 'B', x: 100, y: 200, type: 'rect' }
];// 错误的配置 ?
const badNodes = [{ label: '节点1' }, // 缺少id{ id: 'A' },       // 重复id{ id: 'A' }
];
█ 在React中的使用示例:
function NodeDemo() {const data = {nodes: [{ id: 'home', label: '家庭电脑', type: 'circle' },{ id: 'cloud', label: '阿里云', type: 'rect' }],edges: [] // 暂时没有连接};return <G6Graph data={data} />;
}

三、边(Edges)完全指南

3.1 边的核心属性

interface Edge {source: string;      // 必须!起点节点idtarget: string;      // 必须!终点节点idlabel?: string;      // 边的文字说明type?: string;       // 边类型(直线/曲线等)style?: {            // 样式配置stroke?: string;   // 线条颜色lineWidth?: number;// 线条粗细lineDash?: number[];// 虚线样式};
}
█ 关键规则:
  1. sourcetarget必须指向已存在的节点id
  2. 如果引用了不存在的节点id,边将不会显示
  3. 边的方向由sourcetarget决定

3.2 基础边示例

// 正确的边配置
const edges = [{ source: 'A', target: 'B' },{ source: 'B', target: 'C', label: '100Mbps' }
];// 错误的配置 ?
const badEdges = [{ source: 'A' },              // 缺少target{ source: 'X', target: 'Y' }, // X/Y节点不存在{ target: 'B' }               // 缺少source
];

2.3 边的连接原理

  节点A (id: 'server')[边:source指向'server',target指向'client']↓节点B (id: 'client')
█ 在React中的使用示例:
function EdgeDemo() {const data = {nodes: [{ id: 'router', label: '路由器' },{ id: 'pc', label: '办公电脑' }],edges: [{ source: 'router', target: 'pc',label: '有线连接',style: {stroke: '#1890ff',lineDash: [5, 5] // 虚线效果}}]};return <G6Graph data={data} />;
}

四、完整可运行示例

4.1 家庭网络拓扑案例

import React from 'react';
import G6 from '@antv/g6';function HomeNetwork() {const containerRef = React.useRef(null);React.useEffect(() => {if (!containerRef.current) return;// 创建图实例const graph = new G6.Graph({container: containerRef.current,width: 800,height: 500,defaultNode: {size: 40,style: {fill: '#e6f7ff',stroke: '#1890ff'}},defaultEdge: {style: {stroke: '#91d5ff',lineWidth: 2}}});// 网络拓扑数据const data = {nodes: [{ id: 'modem', label: '光猫' },{ id: 'router', label: '主路由器' },{ id: 'pc1', label: '书房电脑' },{ id: 'pc2', label: '卧室电脑' }],edges: [{ source: 'modem', target: 'router' },{ source: 'router', target: 'pc1' },{ source: 'router', target: 'pc2' }]};graph.data(data);graph.render();return () => graph.destroy();}, []);return (<div><h3>家庭网络拓扑图</h3><div ref={containerRef} style={{ border: '1px solid #f0f0f0',borderRadius: '8px',margin: '20px 0'}} /></div>);
}

如图所示:

在这里插入图片描述

4.2 代码解析

  1. 节点定义

    • 4个网络设备节点:光猫、主路由器、两台电脑
    • 每个节点都有唯一id和中文标签
  2. 边连接

    • 光猫 → 主路由器(WAN连接)
    • 主路由器 → 各电脑(LAN连接)
  3. 样式配置

    • 默认节点:天蓝色填充,蓝色边框
    • 默认边:浅蓝色实线

4.3 运行效果描述

  • 将看到4个蓝色圆形节点,标签清晰可见
  • 节点之间用浅蓝色线条连接
  • 自动布局排列成树状结构
  • 支持画布拖拽和缩放操作

五、常见问题排查

5.1 节点不显示?

? 检查项:

  1. 确认所有节点都有id字段
  2. 检查id是否重复
  3. 确认容器元素已正确挂载

5.2 边不显示?

? 检查项:

  1. 确认sourcetarget的值正确
  2. 检查引用的节点id确实存在
  3. 确认边数据在edges数组中

5.3 布局混乱?

? 解决方案:

  1. 显式设置节点坐标:
nodes: [{ id: 'A', x: 100, y: 100 },{ id: 'B', x: 300, y: 200 }
]
  1. 使用布局算法:
const graph = new G6.Graph({// ...其他配置layout: {type: 'force', // 力导向布局preventOverlap: true}
});

六、最佳实践建议

  1. ID命名规范

    // 好的示例
    { id: 'core_switch_01' }// 不好的示例 ?
    { id: '节点1' } // 避免中文
    { id: ' ' }    // 不要用空格
    
  2. 动态更新数据

    // 在React组件中
    const [graphData, setGraphData] = useState(initialData);// 添加新节点
    const addNode = () => {setGraphData(prev => ({nodes: [...prev.nodes, { id: 'newNode' }],edges: prev.edges}));
    };
    
  3. 数据校验工具

    // 验证数据格式
    const isValidData = (data) => {const nodeIds = new Set();for (const node of data.nodes) {if (!node.id || nodeIds.has(node.id)) return false;nodeIds.add(node.id);}// 检查边...return true;
    };
    

本教程所有示例均通过以下环境验证:

  • React 18.2.0
  • @antv/g6 4.8.6
  • Node.js 16.x

4.2 代码解析

  1. 节点定义

    • 4个网络设备节点:光猫、主路由器、两台电脑
    • 每个节点都有唯一id和中文标签
  2. 边连接

    • 光猫 → 主路由器(WAN连接)
    • 主路由器 → 各电脑(LAN连接)
  3. 样式配置

    • 默认节点:天蓝色填充,蓝色边框
    • 默认边:浅蓝色实线

4.3 运行效果描述

  • 将看到4个蓝色圆形节点,标签清晰可见
  • 节点之间用浅蓝色线条连接
  • 自动布局排列成树状结构
  • 支持画布拖拽和缩放操作

五、常见问题排查

5.1 节点不显示?

✅ 检查项:

  1. 确认所有节点都有id字段
  2. 检查id是否重复
  3. 确认容器元素已正确挂载

5.2 边不显示?

✅ 检查项:

  1. 确认sourcetarget的值正确
  2. 检查引用的节点id确实存在
  3. 确认边数据在edges数组中

5.3 布局混乱?

✅ 解决方案:

  1. 显式设置节点坐标:
nodes: [{ id: 'A', x: 100, y: 100 },{ id: 'B', x: 300, y: 200 }
]
  1. 使用布局算法:
const graph = new G6.Graph({// ...其他配置layout: {type: 'force', // 力导向布局preventOverlap: true}
});

六、最佳实践建议

  1. ID命名规范

    // 好的示例
    { id: 'core_switch_01' }// 不好的示例 ❌
    { id: '节点1' } // 避免中文
    { id: ' ' }    // 不要用空格
    
  2. 动态更新数据

    // 在React组件中
    const [graphData, setGraphData] = useState(initialData);// 添加新节点
    const addNode = () => {setGraphData(prev => ({nodes: [...prev.nodes, { id: 'newNode' }],edges: prev.edges}));
    };
    
  3. 数据校验工具

    // 验证数据格式
    const isValidData = (data) => {const nodeIds = new Set();for (const node of data.nodes) {if (!node.id || nodeIds.has(node.id)) return false;nodeIds.add(node.id);}// 检查边...return true;
    };
    

本教程所有示例均通过以下环境验证:

  • React 18.2.0
  • @antv/g6 4.8.6
  • Node.js 16.x
http://www.xdnf.cn/news/1124983.html

相关文章:

  • 邮件伪造漏洞
  • IOS 18下openURL 失效问题
  • 跨平台移动开发技术深度分析:uni-app、React Native与Flutter的迁移成本、性能、场景与前景
  • [Pytest][Part 5]单条测试和用例集测试
  • 【Python3-Django】快速掌握DRF:ModelViewSet实战指南
  • 运维技术教程之Jenkins的秘钥设置
  • Git分支管理与工作流详解
  • ADC采集、缓存
  • HAProxy双机热备,轻松实现负载均衡
  • 聊聊MySQL中的buffer pool
  • 分布式通信框架 - JGroups
  • 深度强化学习 | 图文详细推导深度确定性策略梯度DDPG算法
  • [数据结构]#3 循环链表/双向链表
  • 为什么市场上电池供电的LoRa DTU比较少?
  • FBRT-YOLO: Faster and Better for Real-Time Aerial Image Detection论文精读(逐段解析)
  • 【HarmonyOS】元服务概念详解
  • 16.避免使用裸 except
  • ELK部署与使用详解
  • L1与L2正则化详解:原理、API使用与实践指南
  • Windows下安装nvm管理多个版本的node.js
  • LVS集群技术
  • 网络--OSPF实验
  • 分布式一致性协议
  • 卷积模型的优化--Dropout、批标准化与学习率衰减
  • 每天一个前端小知识 Day 31 - 前端国际化(i18n)与本地化(l10n)实战方案
  • 分支战略论:Git版本森林中的生存法则
  • PHP password_get_info() 函数
  • 时序预测 | Pytorch实现CNN-LSTM-KAN电力负荷时间序列预测模型
  • 深入理解MyBatis延迟加载:原理、配置与实战优化
  • 设备发出、接收数据帧的工作机制