让 xstate 机器接收事件并更新上下文(但不更改状态),无论它处于哪种状态

Jar*_*ith 2 javascript xstate

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

但我似乎还记得 new allocates() 在状态改变之前实际上不会生效。

Jar*_*ith 8

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

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

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