问题标签 [xstate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
99 浏览

javascript - 全局过渡到“catch-all-do-cleanup-exit-nicely”状态

我有一个捕获所有错误状态,它对我的​​应用程序进行了一些清理并很好地退出。

目前我必须创建一个特定的事件{type: "unexpected_error"}并为我的机器的每个状态添加一个转换来实现这一点。

有没有一种更简单的方法可以为所有状态指定转换,这样我就不必将此转换添加到每个状态?

0 投票
1 回答
976 浏览

javascript - 我可以在 React 中跨多个树共享一个组件实例吗?

我一直在创建一个 API 来帮助管理 React 中的状态机。

它由三个组件组成:

  1. <StateMachine>:接收xstate机器作为道具,并设置上下文供更深的组件使用。
  2. <StateView>: 接收两个道具:state& children,并且仅当该状态当前处于活动状态时才呈现其子级。
  3. <StateControl>: 接收一些任意的 props - 每个都是用于转换机器的事件 - 并将它们转换为转换回调以传递给它children(这不是一个元素,而是由elementType确定的PropTypes)。

以下是正在发生的事情的视觉表示:

状态机 API 可视图

使用 React 的 context API,我可以根据机器的状态灵活地打开/关闭 React 树中的节点。这是一个示例代码片段,演示了这一点:

这很好用!当机器处于“初始化”状态时,MySampleInitializer被渲染。初始化完成后,onSuccess调用将机器转换为“已初始化”。在这一点上,<p>得到渲染。

现在的问题:

在大多数情况下,每个“状态视图”都会呈现不同的组件(当适当的状态变为活动状态时,它会被创建和安装)。

但是,如果我们只想将机器应用于单个组件怎么办?例如,我有一个<Form>组件处理某些表单元素的渲染,并且应该根据表单当前所处的状态接收不同的道具。

使用我当前的 API,<MyForm>在每个中渲染 a<StateView>将导致<MyForm>在状态更改发生时重新安装(从而破坏与之关联的任何内部状态)。DOM 节点本身也将被重新挂载,这可能会重新触发autofocus(例如)之类的事情。

我希望可能有一种方法可以<MyForm>在各种“视图”中共享相同的实例,这样就不会发生这种重新安装。这可能吗?如果没有,是否有适合此 API 的替代解决方案?

非常感谢任何帮助。

PS:如果问题标题不合适,请提出更改建议,以便更容易理解这个问题。谢谢

0 投票
1 回答
954 浏览

javascript - XState:在没有中间状态的情况下链接多个 Promise

我已经阅读了调用多个服务部分,它说可以调用多个承诺,但在我自己的测试中,它们看起来被调用而无需等待前一个完成

也是创建中间状态的解决方法的答案

有没有办法像Promise.each调用一样进行链接,使调用([])可能串行运行?

我只能看到两个选项:

  1. 中间状态
  2. 调用一个本身进行链接的承诺。
0 投票
1 回答
584 浏览

node.js - 检查 xstate 机器定义中的 cond 语句

我有以下代码,start状态条件给我带来了麻烦。

如我所见,如果测试为假,它应该进入下一个状态。最初test = true,在hi动作中我切换为false,然后检查条件,如果cond: () => test === false下一个状态没有运行,但如果cond: () => test === true它运行。

是代码有错误,还是mu的理解cond有误?

0 投票
1 回答
149 浏览

node.js - 在 XState FMS 中调用操作的正确方法是什么?

我在文件中对 XState FMS 的定义task_statemachine.js如下:

实际的机器本身和服务是在TASK()类的构造函数中创建的,如下所示:

我在尝试运行应该调用类中定义的函数的操作时遇到问题。我正在通过以下方式发送事件this.state.send('COMPLETE');

如果我定义actions为回调数组,就像这样runTask: this.runTask(),这些动作似乎会按应有的方式运行。据我的同事说,这样做是不好的做法。加载类后调用操作的正确方法是什么?

0 投票
1 回答
1035 浏览

reactjs - 在 xstate 中生成子机器

我目前正在使用 xstate 开发一个应用程序,我有一台父计算机生成两个不同的子计算机,子计算机对不同的 API 端点进行提取,并且它们都根据状态向父计算机发送解决或拒绝事件在 API 调用中,我需要有关如何确保在转换到父计算机上的空闲状态之前完成所有提取的帮助。

取机:

上面的机器将事件的请求发送回父级。

现在的问题是父机器并行使用这台机器,我需要帮助来确保在转换到父机器上的空闲状态之前完成所有提取。

0 投票
1 回答
288 浏览

xstate - 如何从 xstate 中的状态获取所有可能的转换

给定一个 xState fsm,例如计数器搜索示例。

如何枚举可能的转换?我试过了

问题是我不知道该提交什么getEdges作为第一个论点。当 fsm 刚开始时,上交stateNode不会产生任何边。但是,xState VIZ 应用程序清楚地显示活动状态具有转换。

0 投票
1 回答
88 浏览

state - 动作创建者消息存储在 Xstate 中的什么位置?

分配操作文档的摘录:

“计数更改”存储在哪里?在上下文中?

0 投票
1 回答
133 浏览

state - 是否可以在 xstate 中定义一个转换到自身的状态?

考虑以下 FSM:

是否可以通过事件再次bar转换?barTRIGGER_BAR

0 投票
2 回答
476 浏览

reactjs - 如果你发送一个在 React Xstate 中不存在的事件会发生什么?

以这个有限状态机为例:

在我的组件中,我这样做:

这是完全有效的代码,机器将切换到“bar”状态。现在,如果我这样做会发生什么?

QUX事件未在机器中定义。