使用 xstate,是不是可以配置一个适用于所有状态并在所有状态和子状态中以相同方式处理的事件?

Posted

技术标签:

【中文标题】使用 xstate,是不是可以配置一个适用于所有状态并在所有状态和子状态中以相同方式处理的事件?【英文标题】:Using xstate, is it possible to configure an event that is applicable under all states and is handled in the same way across all states and substates?使用 xstate,是否可以配置一个适用于所有状态并在所有状态和子状态中以相同方式处理的事件? 【发布时间】:2020-08-07 04:08:33 【问题描述】:

我是 xstate 的新手,我正在尝试在应用程序中使用它,用户可以根据父状态和/或子状态在应用程序中请求不同的东西。但是,无论应用程序处于什么状态/子状态,用户都应该能够提出一些请求。对这些事件的响应是相同的,无论之前的状态是什么。 我该如何配置这个事件,这样我就不必在所有状态/子状态下重复定义它了?

【问题讨论】:

【参考方案1】:

是的 - 选择转换的算法类似于 DOM 事件传播,因为它从叶节点搜索到根节点。

您可以在根节点(***)上定义转换,自然会在任何状态下处理:

import  createMachine  from 'xstate';

const machine = createMachine(
  // ...

  // top-level transitions
  on: 
    ESC: /* ... */
  ,
  states: 
    // ...
    someState: 
      on: 
        ESC: /* override top-level transition */
      
    
  
);

【讨论】:

哦,太完美了,正是我需要的! 对不起,我正在寻找相反的行为,用 DOM 的话 - 将事件冒泡到根节点(并在定义事件的所有状态上执行操作)。 xstate 可以吗? @ValentinKantor 这对于算法(遵循 SCXML 算法)是不可能的。

以上是关于使用 xstate,是不是可以配置一个适用于所有状态并在所有状态和子状态中以相同方式处理的事件?的主要内容,如果未能解决你的问题,请参考以下文章

android.hardware.Camera 是不是仍然适用于所有 API 级别?

XState 不会停留在空闲状态

Spring Security CSRF 令牌存储库 Cookie 是不是会自动适用于所有 Ajax 请求?

android 的默认图库和相机意图是不是适用于所有设备?

网站适用于某些浏览器,但不是全部

window.print() 是不是适用于 iPad 上所有版本的 Safari?