generated at
XState
Finite State Machineを定義する
Reactなど向けのpackageもある








なんか型周りが妙に筋が悪いなmrsekut
型安全にするためには追加の設定が少し必要 ref
これがないとevent名などがチェックされない
types: {} as {...} というハック感漂う感じで指定する
stateとcontextが別々の概念なのもよくわからない


これ過去に発行したeventsを記録したり再生したりできるのかな
できるっぽい
いやこれeventsを記録してるのではなくstateを記録してるだけだ
immutable data model的なことはできなさそうか


2023/12にv5が出た




>ステートチャートは、階層、同時実行、通信など、通常のステート マシンでは利用できない追加機能を追加します。

id
state machineのinstanceみたいな感じなんだ
もっとちゃんというとActor Logicのinstanceか
actorはactorを作り出せる
invoked actor
親マシンが呼び出されると開始し、その状態が終了すると消える
プロセスみたいな?
spawned actor
transitionで開始され、stopや親マシンのstop時に停止する
subscribeできる
Actor Logic
Guards
validation
event発生時やstate遷移の前後で起こす副作用
entry
state nodeに入る前に呼ばれる
exit
state nodeから終了する際に呼ばれる
例えば、遅延させたり、通信したり、XStateのcontextを更新したり
上の方でactionsを列挙しておいて、状態遷移時にそれを呼ぶんだ
なんで列挙する必要があるんだろう
ts
const feedbackMachine = setup({ actions: { track: (_, params: unknown) => { track(params); // Tracks { response: 'good' } }, showConfetti: () => { // ... } } }).createMachine({ // ... states: { // ... question: { on: { 'feedback.good': { actions: [ { type: 'track', params: { response: 'good' } } ] } }, exit: ['exitAction'] } thanks: { entry: ['showConfetti'], } } });
states: のキーで指定しているのはあくまでも「状態名」ってことかmrsekut
その状態の中でどういう内容を保持しているかはそこで表現されない
その保持したいものがcontextということか
これだけ見てもわからん
ts
import { assign, createMachine } from 'xstate'; export const toggleMachine = createMachine({ id: 'toggle', context: { count: 0 }, initial: 'Inactive', states: { Inactive: { on: { toggle: 'Active' }, }, Active: { entry: assign({ count: ({ context }) => context.count + 1 }), on: { toggle: 'Inactive' }, after: { 2000: 'Inactive' }, }, }, });
getSnapShotして現在のやつ取れる
ts
const a = createActor(machine); a.send({ type: 'ADD', item: { id: 1, name: 'foo', completed: false } }); const s = a.getSnapshot().context.state


visualizerがある
GUIで編集してXStateのコードをexportできる
一部有料?
状態遷移のコードを可視化できるのかなり良いなmrsekut




関連