Как получить начальное состояние иерархической машины xstate? - PullRequest
0 голосов
/ 06 сентября 2018

Предполагая, что у нас есть следующая упрощенная иерархическая xstate машина ...

const HFSM = Machine({
  initial: 'init',
  states: {
    init: {
      initial: 'leaf'
    }
  }
});

... каков наилучший способ получить его начальное состояние?

Обратите внимание, что HFSM.initial возвращает мне 'init', а не {init: 'leaf'}

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

При console.log(HFSM) свойства этого автомата состояния, а также его методы можно увидеть в свойстве proto . Начальное состояние находится в HFSM.initialState, и если значение является тем, что мы ищем, то это HFSM.initialState.value

Войдите в консоль и просмотрите свойства возвращаемого объекта:

HFSM.getInitialState() = начальное состояние машины, которая еще не запущена, и попытки перехода не предпринимались
- changed: undefined
- value: {}
- event: {type: "xstate.init"}

HFSM.initialState
- changed: undefined
- value: {init: "leaf"}
- event: {type: "xstate.init"}

HFSM.transition(HFSM.initialState, 'FAKE_EVENT') = пытается перейти из начального состояния (не состояние name - https://xstate.js.org/docs/guides/transitions.html#machine-transition-method), с поддельным событием, поэтому ничего не делает и остается в состоянии машина пыталась перейти с
- changed: false
- value: {init: "leaf"}
- event: {type: "FAKE_EVENT"}

HFSM.transition(HFSM.initialState, 'REAL_EVENT')
- changed: true
- value: {init: "leaf2"}
- event: {type: "REAL_EVENT"}


Начиная с xstate.js, версия 4.0 выглядит так, как будто мы можем использовать интерпретатор, который может «отслеживать текущее состояние», среди других полезных вещей. https://xstate.js.org/docs/guides/interpretation.html#interpreter.

Итак, после инициализации этой службы: const serv = interpret(HFSM) мы можем получить начальное состояние с помощью: serv.start() или serv.init().

serv.start() === serve.init() // true

0 голосов
/ 06 сентября 2018

То, как я подошел к этому, состояло в том, чтобы вызвать поддельный переход:

const currentState = HFSM.transition(HFSM.initial, "fake").value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...