一个 state 是指某个 物件 / 实体 / 行为系统,在某个时机点 / 情况底下的型态、模式、状况,但不是描述在这个状况下所有的资料,比如在某些状态下,可能会有无限的资料存在。
by XState - Concepts
主体:水
状态:固态、液态、气态。
用来描述一个系统、物件或实体的行为的数学运算模型,在一个时机点下,只能有个状态存在。
具有以下特点
英文 | 中文 |
---|---|
0. Entity / Object: Door | 0. 主体:门 |
1. Initial State: closed | 1. 初始状态:关着 |
2. Finite States: closed, opened | 2. 有限个状态:关着、开了 |
3. Finite Events: open, close | 3. 有限个事件:开门、关门 |
4. Finite Final States: N/A(0) | 4.有限个结束状态:不存在 |
5. Trasition Table:see below | 5.转移表:如下 |
Current State | Event | Next State |
---|---|---|
closed | open | opened |
opened | close | closed |
当前状态 | 事件 | 未来状态 |
---|---|---|
关着 | 开门 | 开了 |
开了 | 关门 | 关着 |
State Chart 是一位有名的数学家 David HAREL 提出在现实世界的复杂系统可以怎麽用一个不错的视觉表达的形式(A VISUAL FORMALISM FOR COMPLEX SYSTEMS),简单来说,就是 FSM 的加强版、现实生活版。
前面稍微介绍过 State Chart 的一些内容
在一个复杂应用系统、使用场景中,明确(Explicitly)说出你的状态能有哪些、状态该如何转移、限制你系统及状态的可能性,避免系统状态跑出例外或漏想清楚的地方( 可见Day1 Day2 Day6 Day7 这几篇的比较 )
XState 就是一个以 JavaScript / TypeScript 实作 Finite State Machine 跟 State Chart 的套件。我们可以藉此方便快速建立我们 App 中的 State Chart 来作为状态管理。
JavaScript and TypeScript finite state machines (opens new window)and statecharts (opens new window)for the modern web. by XState
前些日子我们也曾手动尝试自己建立 2 个版本的 state machine ,但来到复杂的 state chart,我们还是依靠於别人写好的火箭,不重复造轮子了。
还记得我们在 Day 09、Day 10 有 2 个自制版本的 createMacine
[Day 09] 的 createMacine
是 Pure function - 无状态版,要自己另外储存 previousState
, nextState
[Day 10] 的 createMacine
是 有状态版,会回传我们一个 machine 的 object instance ,里面记忆着当前的状态(currentState
)。
今天介绍的 XState API - createMachine 是我们 Day 09 制作的 Pure function - 无状态版,只不过里面吃的参数 machineConfig
可以处理得远比我们的 util function 多,这里的 machineConfig
是连 State Chart 的那些内容也可以一起写入设定的(eg Action, Guard Codition, Parallel States, Hierarchical States)
const doorMachine = createMachine({
// Machine identifier
id: "door",
// Initial state
initial: "关着",
// State definitions
states: {
关着: {
on: {
// 可以用字串描述
开门: "开了"
}
},
开了: {
on: {
// 也可用物件描述
关门: { target: "关着" }
}
}
}
});
const state0 = doorMachine.initialState;
console.log(state0);
const state1 = doorMachine.transition(state0, "开门");
https://codesandbox.io/s/xstate-01-tt1xr?file=/src/index.js
>>: DAY16:Pytorch transforms(上)
只说你敢当面对那个人说的话 越少在背後议论别人 会妨碍效率且引起负面感受的八卦就会减少 诚实就像看...
蠕虫可以主动利用网路服务漏洞或被动使用群发邮件来传播自身。但是,只有当用户执行附加到电子邮件的恶意代...
review 上一篇介绍了 transduce 基本概念後,就可以知道 transduce 就是对资...
建立 Django 专案 Django 建立专案的指令相当简单: django-admin star...
1. 物件的引用 在讨论物件引用前先探讨call by value与call by referenc...