Начнём¶
Наш первый конечный автомат¶
Предположим, мы хотим смоделировать Promise как конечный автомат. Сначала установите XState с помощью NPM или Yarn:
1 |
|
Если вы используете VSCode, вам следует установить наше расширение VSCode, чтобы вы могли визуализировать автомат, который вы строите, в процессе работы.
Затем в своем проекте импортируйте createMachine
— функцию, которая создает конечный автомат.
1 2 3 |
|
Мы передадим конфигурацию автомата createMachine
. Нам потребуется предоставить:
id
— для идентификации автоматаinitial
— для указания узла начального состояния, в котором должен находиться этот автоматstates
— для определения каждого из дочерних состояний:
1 2 3 4 5 6 7 8 9 10 11 |
|
Затем нам нужно добавить переходы к узлам состояния.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Нам также нужно пометить узлы состояния resolved
и rejected
, как узлы конечного состояния, поскольку автомат Promise прекращает работу, как только достигает этих состояний:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Теперь наш конечный автомат готов к визуализации. Вы можете скопировать / вставить приведенный выше код и визуализировать его в Stately Viz. Вот как это будет выглядеть:
Запуск нашего автомата¶
То, как мы запускаем наш автомат, зависит от того, где мы планируем его использовать.
В Node.js или Vanilla JS¶
Чтобы интерпретировать автомат и заставить его работать, нам нужно добавить интерпретатор. Этот код создает службу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
В React¶
Если бы мы хотели использовать наш автомат внутри компонента React, мы могли бы использовать хук useMachine
:
Дополнительно нам нужно установить пакет @xstate/react
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|