假设我们有以下简化的分层xstate
机器......
const HFSM = Machine({
initial: 'init',
states: {
init: {
initial: 'leaf'
}
}
});
...获得其初始状态的最佳方法是什么?
请注意,HFSM.initial
返回我'init'而不是{init: 'leaf'}
假设我们有以下简化的分层xstate
机器......
const HFSM = Machine({
initial: 'init',
states: {
init: {
initial: 'leaf'
}
}
});
...获得其初始状态的最佳方法是什么?
请注意,HFSM.initial
返回我'init'而不是{init: 'leaf'}
我们可以在protoconsole.log(HFSM)
属性中看到这个状态机的属性,以及它的方法。初始状态在 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')
= 尝试使用假事件从初始状态(不是状态名称- 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
我解决这个问题的方法是调用一个虚假的转换:
const currentState = HFSM.transition(HFSM.initial, "fake").value;