Как получить все возможные переходы из состояния в xstate - PullRequest
0 голосов
/ 09 ноября 2019

При наличии xState fsm, например counter или search example.

Как можно перечислить возможные переходы? Я пытался

const current = service.state
const stateNode = service.machine
const isActive = !stateNode.parent || current.matches(stateNode.path.join('.')) || undefined
getEdges(<where do I get this node?>, { depth: 0 }).reduce((actions, edge) 

Проблема в том, что я не знаю, что передать getEdges в качестве первого аргумента. Когда fsm только начался, передача stateNode не дает никаких ребер. Однако приложение xState VIZ четко показывает, что активное состояние имеет переходы.

1 Ответ

0 голосов
/ 15 ноября 2019

Я играл с частями @xstate/graph, и этот пример настолько близок, насколько я получаю к тому, что вы хотите:

import { Machine } from "xstate"

import { getShortestPaths } from '@xstate/graph'

export const feedbackMachine = Machine({
    id: 'feedback',
    initial: 'question',
    states: {
        question: {
            on: {
                CLICK_GOOD: 'thanks',
                CLICK_BAD: 'form',
                CLOSE: 'closed',
                ESC: 'closed',
                REMOVE_ME: 'nope'
            }
        },
        form: {
            on: {
                SUBMIT: 'thanks',
                CLOSE: 'closed',
                ESC: 'closed'
            }
        },
        nope: {
            on: {

            }
        },
        thanks: {
            on: {
                CLOSE: 'closed',
                ESC: 'closed'
            }
        },
        closed: {
            type: 'final'
        }
    }
})

const showPaths = () => {
    const paths = getShortestPaths(feedbackMachine)
    const states = Object.keys(paths).filter(k => paths[k].weight > 0)
    console.log(states)
    // [""thanks"", ""form"", ""closed"", ""nope""]
}

showPaths()

Как только вы удалите REMOVE_ME: 'nope' из возможных переходов в вопросесостояние, вы должны увидеть результат как: [""thanks"", ""form"", ""closed""] в showPaths

Я также вижу, что getEdges были недавно удалены из @xstate/graph, поэтому я бы пока отказался от его использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...