前言
状态图是一个有限状态的表达,基本用于我们编程语言的逻辑运行。
mermaid 的状态图,官方说尽可能保持和 plantuml 一致,也就说写法上都差不多。
基础语法
# 这里拿官方的例子来说明# * 和 单词都是代表一个节点# * 是特殊节点,必须存在的!stateDiagram[*] --> StillStill --> [*]Still --> MovingMoving --> StillMoving --> CrashCrash --> [*]
添加描述信息节点
# 姿势1stateDiagramstate "This is a state description" as s2[*] --> s2s1 --> s2s2 --> [*]# 姿势2stateDiagrams2:"This is a state description"[*] --> s2s1 --> s2state --> [*]
节点之间的过渡描述
stateDiagram[*]--> 西游记四师徒西游记四师徒 --> 大雷音寺: 经过九九八十一难大雷音寺 -->[*]: 功德圆满
节点传递状态
stateDiagram[*] --> 不知名的家庭不知名的家庭 --> 儿子不知名的家庭 --> 女儿state 儿子 {[*] --> 努力学习努力学习 --> 打工赚钱打工赚钱 --> 娶妻养娃娶妻养娃 --> [*]}state 女儿 {[*] --> 努力学习努力学习 --> 打工赚钱打工赚钱 --> 嫁人生娃嫁人生娃 --> [*]}儿子 --> 孤独终老女儿 --> 孤独终老孤独终老 --> 化作春泥更护花化作春泥更护花 --> [*]
状态 fork 和 join
状态分叉主要使用修饰符<<fork>>
状态汇合主要使用修饰符<<join>>
stateDiagramstate 人类 <<fork>>[*] --> 人类人类 --> 亚洲人人类 --> 美洲人人类 --> 印第安人state 都离不开 <<join>>亚洲人 --> 都离不开美洲人 --> 都离不开印第安人 --> 都离不开都离不开 --> 生命之泉生命之泉 --> [*]
备注
支持的方向有:right of,left of
接着上面的例子说
stateDiagramstate 人类 <<fork>>[*] --> 人类note left of 人类: 人类也是哺乳动物的一种,哪来那么高贵,无非适者生存,不适者淘汰人类 --> 亚洲人人类 --> 美洲人人类 --> 印第安人state 水 <<join>>亚洲人 --> 水美洲人 --> 水印第安人 --> 水水 --> 生命之泉note right of 生命之泉又名 waterend note生命之泉 --> [*]
并发状态
并发状态主要用到修饰符—
stateDiagram[*] --> 开炮开炮--> 胜利:大吉大利,今晚吃鸡胜利 --> [*]state 开炮 {[*] --> 激光炮激光炮 --> 发射 : 充能发射 --> 熄火 : 能量消耗完毕--[*] --> 东风41东风41 --> 定点打击 : 定位->蓄能定点打击 --> 熄火 : 确认目标击中}
