假设我们有以下简化的分层xstate
机器...
const HFSM = Machine({
initial: 'init',
states: {
init: {
initial: 'leaf'
}
}
});
...获得初始状态的最佳方法是什么?
请注意,HFSM.initial
返回我是'init'而不是{init: 'leaf'}
答案 0 :(得分:1)
在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
答案 1 :(得分:0)
我解决这个问题的方法是调用一个伪造的过渡:
const currentState = HFSM.transition(HFSM.initial, "fake").value;