【ReactJS】使用GoJS实现自己的图表App

2025-03-25T14:42:53+08:00 | 3分钟阅读 | 更新于 2025-03-25T14:42:53+08:00

Macro Zhao

【ReactJS】使用GoJS实现自己的图表App

@TOC

推荐超级课程:

1:用于绘制自定义图表的JavaScript库:

用于绘制UML(或BPMN或ERD …)图表的JavaScript库:

  • . JointJS
  • . Rappid
  • . MxGraph
  • . GoJS
  • . jsUML2库
  • . Mindfusion Diagram库
  • . Nomnoml
  • . Mermaid.js
  • . Diagram.js
  • . State.js

在本帖中,我将介绍GoJS。😉

2:为什么选择GoJS?

GoJS是一个功能丰富的JavaScript库,用于在现代浏览器和平台上实现交互式图表。
GoJS通过可定制的模板和布局使构建复杂节点、链接和组的图表变得简单。

GoJS提供许多高级功能,用于用户交互,如拖放、复制粘贴、事务状态和撤销管理、色板、概览、数据绑定模型、事件处理程序,
以及用于自定义操作的可扩展工具系统。
他们提供了150多个交互示例 来帮助您开始使用BPMN、流程图、状态图、可视化树、Sankey和数据流等图表。
API文档非常完善,确保您可以立即开始使用它。

3:让我们使用现有的React应用程序:

步骤1:

安装:
首先安装GoJS和gojs-react:

npm install gojs gojs-react

导入:

import * as go from gojs;  
import { ReactDiagram } from gojs-react;

步骤2:

添加一个initDiagram函数:

该函数处理对GoJS模型的任何更改。

undoManager.isEnabled: true// 必须设置以允许对模型更改进行监听  
linkKeyProperty: key’:// 重要!在使用GraphLinksModel时,必须定义以进行合并和数据同步  
diagram.nodeTemplate// 定义一个简单的节点模板  
{ name: SHAPE, fill: white, strokeWidth: 0 }// Shape.fill绑定到Node.data.color  
{ margin: 8, editable: true }// 文本周围留出一些空间

步骤3:

在render方法中添加ReactDiagram组件:

<ReactDiagram
          initDiagram={initDiagram}
          divClassName='diagram-component'
          nodeDataArray={[
            { key: 0, text: 'Alpha', color: 'lightblue', loc: '0 0' },
            { key: 1, text: 'Beta', color: 'orange', loc: '150 0' },
            { key: 2, text: 'Gamma', color: 'lightgreen', loc: '0 150' },
            { key: 3, text: 'Delta', color: 'pink', loc: '150 150' }
          ]}
          linkDataArray={[
            { key: -1, from: 0, to: 1 },
            { key: -2, from: 0, to: 2 },
            { key: -3, from: 1, to: 1 },
            { key: -4, from: 2, to: 3 },
            { key: -5, from: 3, to: 0 }
          ]}
          onModelChange={handleModelChange}
        />

创建图表数据:

• 创建nodeDataArray:每个对象代表图表中的节点,包含特征(文本、颜色、窗口上的位置等)  
• linkDataArray:每个对象代表两个节点之间的关系  
示例:(源:“节点编号1” 到:“节点编号3”)

步骤4:

添加一个模型更改处理程序函数,
该函数处理对GoJS模型的任何更改。
在这里,您将对React状态进行任何更新,下面将对此进行讨论。

function handleModelChange(changes) {
    console.log('changes', changes);
}

在组件的第一次渲染中,更改值返回一个包含不同信息的数组,例如:

insertedLinkKeys:两个节点之间的关系键,  
insertedNodeKeys:节点键,  
modifiedLinkData:linkDataArray对象,  
modifiedNodeData:nodeDataArray对象

• 如果我们修改节点的位置,“更改”会返回新的modifiedNodeData数组,其中包含修改后节点的“loc”属性的新值
• 如果我们修改关系,“更改”会返回新的modifiedLinkData数组,其中包含“from”和“to”属性的新值

本文探讨的内容代码可以参考:在线示例代码

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee