name: mermaid-diagrams description: 使用Mermaid语法创建图表和可视化。用于生成流程图、序列图、类图、实体关系图、甘特图或任何视觉文档。触发词:Mermaid、流程图、序列图、类图、ER图、甘特图、图表、可视化。
Mermaid图表
使用Mermaid markdown语法创建图表和可视化。
快速参考
Mermaid图表写在以mermaid为语言标识符的markdown代码块中。
流程图
flowchart TD
A[开始] --> B{是否有效?}
B -->|是| C[处理数据]
B -->|否| D[显示错误]
C --> E[保存到数据库]
D --> F[返回输入]
E --> G[结束]
F --> A
流程图语法
flowchart TD %% TD = 自上而下, LR = 从左到右, RL, BT
A[矩形] %% 方括号 = 矩形
B(圆角) %% 括号 = 圆角矩形
C{菱形} %% 花括号 = 菱形/决策
D[[子程序]] %% 双括号 = 子程序
E[(数据库)] %% 圆柱形状
F((圆形)) %% 双括号 = 圆形
G>非对称] %% 旗形形状
A --> B %% 箭头
B --- C %% 无箭头线
C -.-> D %% 虚线箭头
D ==> E %% 粗箭头
E --文本--> F %% 带标签的箭头
F -->|标签| G %% 替代标签语法
子图
flowchart TB
subgraph 前端
A[React应用] --> B[组件]
B --> C[钩子]
end
subgraph 后端
D[API服务器] --> E[数据库]
end
A -->|HTTP| D
序列图
sequenceDiagram
participant U as 用户
participant C as 客户端
participant S as 服务器
participant D as 数据库
U->>C: 点击提交
C->>S: POST /api/data
activate S
S->>D: INSERT查询
D-->>S: 成功
S-->>C: 200 OK
deactivate S
C-->>U: 显示成功消息
序列图语法
sequenceDiagram
participant A as 爱丽丝
participant B as 鲍勃
A->>B: 实线带箭头
A-->>B: 虚线带箭头
A-)B: 实线开箭头
A--)B: 虚线开箭头
activate B %% 激活框
B->>A: 响应
deactivate B
Note over A,B: 这是一个注释
Note right of A: 右侧注释
alt 条件真
A->>B: 执行此操作
else 条件假
A->>B: 执行彼操作
end
loop 每分钟
A->>B: 心跳
end
opt 可选操作
A->>B: 可能执行此操作
end
类图
classDiagram
class 用户 {
+字符串 id
+字符串 姓名
+字符串 邮箱
+登录()
+退出()
}
class 订单 {
+字符串 id
+日期 创建时间
+计算总额()
}
class 产品 {
+字符串 id
+字符串 名称
+数字 价格
}
用户 "1" --> "*" 订单 : 下单
订单 "*" --> "*" 产品 : 包含
类图语法
classDiagram
class 类名 {
+公共字段
-私有字段
#受保护字段
~包字段
+公共方法()
-私有方法()
}
类A <|-- 类B : 继承
类C *-- 类D : 组合
类E o-- 类F : 聚合
类G --> 类H : 关联
类I ..> 类J : 依赖
类K ..|> 类L : 实现
实体关系图
erDiagram
用户 ||--o{ 订单 : 下单
订单 ||--|{ 订单项 : 包含
产品 ||--o{ 订单项 : "在其中"
用户 {
字符串 id PK
字符串 邮箱 UK
字符串 姓名
日期时间 创建时间
}
订单 {
字符串 id PK
字符串 用户_id FK
日期时间 创建时间
字符串 状态
}
产品 {
字符串 id PK
字符串 名称
小数 价格
}
订单项 {
字符串 id PK
字符串 订单_id FK
字符串 产品_id FK
整数 数量
}
ER图基数
||--|| 一对一
||--o{ 一对零或多
||--|{ 一对一个或多个
}o--o{ 零或多对零或多
甘特图
gantt
标题 项目时间线
日期格式 YYYY-MM-DD
section 规划
需求分析 :a1, 2024-01-01, 7d
设计 :a2, after a1, 14d
section 开发
后端API :b1, after a2, 21d
前端 :b2, after a2, 28d
集成 :b3, after b1, 7d
section 测试
QA测试 :c1, after b3, 14d
缺陷修复 :c2, after c1, 7d
section 发布
部署 :milestone, after c2, 0d
状态图
stateDiagram-v2
[*] --> 空闲
空闲 --> 处理中: 提交
处理中 --> 成功: 有效
处理中 --> 错误: 无效
成功 --> 空闲: 重置
错误 --> 空闲: 重试
成功 --> [*]
饼图
pie title 浏览器市场份额
"Chrome" : 65
"Safari" : 19
"Firefox" : 10
"Edge" : 4
"其他" : 2
Git图
gitGraph
commit
commit
branch 特性
checkout 特性
commit
commit
checkout 主分支
merge 特性
commit
branch 热修复
checkout 热修复
commit
checkout 主分支
merge 热修复
用户旅程
journey
标题 用户结账体验
section 浏览
查看产品: 5: 用户
添加到购物车: 4: 用户
section 结账
输入地址: 3: 用户
输入支付: 2: 用户
确认订单: 5: 用户
section 购后
接收确认: 5: 用户, 系统
跟踪运输: 4: 用户
思维导图
mindmap
root((项目))
前端
React
TypeScript
Tailwind
后端
Node.js
PostgreSQL
Redis
DevOps
Docker
Kubernetes
CI/CD
样式
flowchart LR
A[开始]:::绿色 --> B[处理]:::蓝色 --> C[结束]:::红色
classDef 绿色 fill:#22c55e,color:#fff
classDef 蓝色 fill:#3b82f6,color:#fff
classDef 红色 fill:#ef4444,color:#fff
React组件
import mermaid from 'mermaid';
import { useEffect, useRef } from 'react';
mermaid.initialize({
startOnLoad: true,
theme: 'neutral', // 默认、深色、森林、中性
securityLevel: 'loose',
});
interface MermaidProps {
chart: string;
id?: string;
}
export function Mermaid({ chart, id = 'mermaid-diagram' }: MermaidProps) {
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
if (ref.current) {
mermaid.render(id, chart).then(({ svg }) => {
if (ref.current) {
ref.current.innerHTML = svg;
}
});
}
}, [chart, id]);
return <div ref={ref} className="mermaid-container" />;
}
// 用法
<Mermaid
chart={`
flowchart LR
A --> B --> C
`}
/>
提示
- 方向: 使用
TD(自上而下)、LR(从左到右)、BT(自下而上)、RL(从右到左) - 注释: 使用
%%进行注释 - 引号: 对于包含特殊字符的标签,使用引号:
A["包含(括号)的标签"] - 换行: 使用
<br/>进行多行标签
资源
- Mermaid文档: https://mermaid.js.org/
- 在线编辑器: https://mermaid.live
- GitHub支持: Mermaid在GitHub markdown中本机支持