使用 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 级别?