如何在 xstate 中重用状态转换?

Posted

技术标签:

【中文标题】如何在 xstate 中重用状态转换?【英文标题】:How to reuse state transitions in xstate? 【发布时间】:2020-03-14 00:09:36 【问题描述】:

取以下有限状态机:

const machine = Machine(
  initial: "foo",
  states: 
    foo: 
      on: 
        BAZ: "baz",
        QUX: "qux",
      ,
    ,
    bar: 
      on: 
        BAZ: "baz",
        QUX: "qux",
      ,
    ,
    baz: 
      on: 
        FOO: "foo",
        BAR: "bar",
      ,
    ,
    qux: 
      on: 
        FOO: "foo",
        BAR: "bar",
      ,
    ,
  ,
);

请注意,有两组重复的状态转换:

on: 
  FOO: "foo",
  bar: "bar",

on: 
  BAZ: "baz",
  QUX: "qux",

除了将状态转换定义为机器定义之外的优秀 javascript 对象之外,是否有一种特殊的方式来做到这一点?

【问题讨论】:

【参考方案1】:

除了将状态转换定义为机器定义之外的良好 JavaScript 对象

您回答了自己的问题!您已经知道如何删除这些数据,因此将它们定义为外部对象并在机器内引用它们。不需要特殊的 API 来执行此操作。

【讨论】:

很高兴知道!其他范例(如 GraphQL)有其自定义 API 来鼓励代码库中的 DRY-ness,即 fragments。

以上是关于如何在 xstate 中重用状态转换?的主要内容,如果未能解决你的问题,请参考以下文章

状态正在改变,但 Xstate 中未触发转换

xstate - 如何正确处理转换错误?

如何防止 XState 节点在接收事件时重置其子并行状态?

如何使用 xstate 跟踪分析事件

在 xstate 中生成子机器

如何在反应中保持 Xstate 状态机中的状态?