Mermaid 中的状态图通过展示状态及其之间的转换来可视化系统行为。本页面介绍了 Mermaid 代码库中状态图的实现,重点关注系统如何解析、处理和渲染这些图表。
有关其他图表类型的信息,请参阅图表类型。
Mermaid 支持两个版本的状态图
stateDiagram (v1):原始实现stateDiagram-v2 (v2):增强实现,具有更多功能推荐所有新图表使用版本 2,因为它提供了更好的渲染效果和更多功能。
状态图通过解析器-数据库-渲染器架构实现
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.ts packages/mermaid/src/diagrams/state/stateDb.js packages/mermaid/src/diagrams/state/shapes.js
StateDB 类是存储所有图表信息的中心数据结构
数据库存储
来源:packages/mermaid/src/diagrams/state/stateDb.js packages/mermaid/src/diagrams/state/stateDb.spec.js1-77
状态渲染系统使用 shapes.js 来绘制不同类型的状态
来源:packages/mermaid/src/diagrams/state/shapes.js369-408
状态图支持各种状态类型和功能
带有可选描述的基本状态
来源:packages/mermaid/src/diagrams/state/parser/state-parser.spec.js9-51
标记流程开始和结束的特殊状态
来源:packages/mermaid/src/diagrams/state/shapes.js13-21 packages/mermaid/src/diagrams/state/shapes.js247-272
包含其他状态的状态
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js177-204 packages/mermaid/src/diagrams/state/shapes.js137-246
分割和合并并行流程的状态
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js261-290 packages/mermaid/src/diagrams/state/shapes.js273-290
表示决策点的状态
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js315-332
用分隔符分隔并行区域的状态
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js290-325 packages/mermaid/src/diagrams/state/shapes.js28-37
可以附加到状态的文本注释
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js336-381 packages/mermaid/src/diagrams/state/shapes.js349-360
控制图表的方向
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js443-469
状态图支持两种样式设置状态的方法
定义可重用样式并将其应用于多个状态
来源:packages/mermaid/src/diagrams/state/parser/state-style.spec.js9-166
直接将样式应用于特定状态
来源:packages/mermaid/src/diagrams/state/parser/state-style.spec.js211-251
状态图通过图表定义与 Mermaid 核心集成
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.ts8-21
解析过程由 JISON 解析器处理,它会
StateDB 实例上调用相应的方法来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js16-25
渲染过程涉及
StateDB 获取状态和关系drawState() 为每个状态创建 SVG 元素drawEdge() 为转换创建 SVG 路径来源:packages/mermaid/src/diagrams/state/shapes.js369-408 packages/mermaid/src/diagrams/state/shapes.js411-536
让我们追踪一个简单状态图的生命周期
处理步骤
解析:
StateDB.addState() 将每个状态添加到数据库StateDB.addRelation() 添加状态之间的转换StateDB.addStyleClass() 添加 "important" 类渲染:
drawState() 根据类型渲染每个状态drawEdge() 渲染每个转换drawNote() 渲染 "状态 1" 的注释输出:
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.spec.js16-25 packages/mermaid/src/diagrams/state/shapes.js369-408 packages/mermaid/src/diagrams/state/shapes.js411-536
Mermaid 中的状态图通过结构良好的代码库提供了一种强大的方式来可视化基于状态的系统。该架构将解析、数据管理和渲染分开,使系统易于维护和扩展。
该实现支持各种类型的状态和转换,以及样式选项和方向控制,允许使用简洁的语法创建简单和复杂的状态图。
来源:packages/mermaid/src/diagrams/state/stateDiagram-v2.ts packages/mermaid/src/diagrams/state/stateDb.js packages/mermaid/src/diagrams/state/shapes.js