2

基本上,我有很多不同的状态。我希望机器能够通过事件从外部接收和更新上下文(无论它处于哪种状态)。我发现这个链接说事件如何是根级别的...... 使用xstate,是否可以配置一个适用于所有状态并在所有状态和子状态中以相同方式处理的事件?

但我似乎也记得 new assigns() 直到状态改变才真正生效。

4

1 回答 1

4

我不知道它在任何地方都有记录,但是我从 xstate 论坛了解到的一个看似不错的解决方案是进行顶级转换。

{
initial: 'Idle',
    on: {
      NEW_BLOCK: {
        actions: assign({
          block: 'addNewBlock'
        }),
        internal: true,
      },
    },
    states: {
      Idle: {},
      StateOne: {},
      StateTwo: {},
    }
}

这将导致整个机器始终监视“NEW_BLOCK”事件,并将其添加到上下文中,无论事件是否在空闲、StateOne、StateTwo 或您可能添加的任何其他状态期间到达。无论机器处于何种状态,它都会导致自我转换。但更新的上下文将在之后立即可用。

于 2020-12-08T02:34:30.713 回答