xState
https://scrapbox.io/files/67f28cc5bd74c7d9c2450330.png
https://xstate.js.org/
https://xstatebyexample.com/
JavaScript / TypeScript で ステートマシン を実現するライブラリ
React や Vue、Svelte などのフロントエンドフレームワークのみならず、バックエンドでも利用可能
It integrates well with React, Vue, Svelte, and other frameworks and can be used in the frontend, backend, or wherever JavaScript runs.
React: https://stately.ai/docs/xstate-react
Vue: https://stately.ai/docs/xstate-vue
Svelte: https://stately.ai/docs/xstate-svelte
コードから 状態遷移図 を確認できるらしい…凄い
https://marketplace.visualstudio.com/items/?itemName=statelyai.stately-vscode
Alloy を彷彿とさせる
いつ採用すべきか?
https://zenn.dev/hayato94087/books/0a206dc72782be/viewer/e040owimxcdtwm
一言でいうと、ありえない状態とイベントの組み合わせを防ぐため です。
いつ使うべきでないか?
https://user-first.ikyu.co.jp/entry/2023/12/22/190342
XState で全ての状態を管理すべきと言ってるわけではありません。ボタンを押すとモーダルが表示される状態遷移は、XState で管理してしまうと却って オーバーエンジニアリング になってしまいます。
また、以下の場合は状態として持つべきではありません。
状態遷移から独立しており、値が操作の過程で変化しないもの
例えば、API レスポンスは state machine の遷移に変化する値ではないので XState で管理すべきではなく、useState で管理すべきです
いつ使うべきか?。
e.g. 一休
XStateで管理すべき基準としては
1つのコンポーネントで useState が3つ以上定義されている
何かアクションを起こした時の遷移先が2つ以上ある
https://zenn.dev/hayato94087/books/0a206dc72782be と公式ドキュメントを見つつ実際に動かす
第 2 章では Node.js を用いて動かしているが、Deno でやってみる
Deno を用いて xState の基本を学ぶ
そもそも動くのか…?
公式ドキュメントにも記載があるし動きそう
You can use XState in Node.js or Deno to build serverless functions or persistent servers.
https://stately.ai/blog/2022-06-21-what-is-xstate-used-for#backend
第 3 章 では Next.js を用いて動かしているが、SvelteKit でやってみる
Svelte を用いて xState の基本を学ぶ
#JavaScript #ステートマシン #アクターモデル #イベント駆動型プログラミング