问题标签 [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 回答
169 浏览

reactjs - 如何使用 xstate 跟踪分析事件

我在我的 React Native 应用程序中使用 xstate 来管理一个相当复杂的流程。我想系统地记录状态机中发生的每个状态转换和事件的分析事件。到目前为止,我还没有想出如何在不手动调用logEvent每个事件的动作的情况下做到这一点。例如,在一台比我构建的机器小得多的机器上:

这么多重复:(

我读到的另一种方法是使用interpret和添加一个onTransition监听器(https://xstate.js.org/docs/guides/interpretation.html#transitions)。但是,这还需要手动发送事件以触发 onTransition 侦听器,因此它不是 imo 的解决方案。

我还找到了@xstate/analytics,但是没有文档,而且自述文件说我们不应该使用它^^

有没有办法在每次转换时调用一个动作而不会重复我自己?

0 投票
1 回答
31 浏览

vue.js - 包含条件的 xstate 配置结构 & 可用于 vue-kanban pkg

我正在尝试创建在移动到另一个状态时需要检查的 xstate Machine(使用VueJs)。

问题是尝试的方式不适用于vue-kanban(https://github.com/BrockReece/vue-kanban pkg

下面是我的示例状态机配置:

这是看板的用户界面(https://ibb.co/6rWxN0F

在我通过将条件添加到“暂停”状态来更改上述配置之后,我无法从“暂停”状态移动到任何地方。

以下是新配置:

任何帮助解决它!

0 投票
1 回答
151 浏览

vue.js - XState 不会停留在空闲状态

我在我的应用程序中xstate一起使用vuex

  • vuex处理用户、api调用、响应项等。
  • xstate主要处理复杂的表单交互。

由于这个原因,复杂的表单包含多个组件,它们相互通信我必须在组件级别而xstate 不是vuex在内部实现。在 xstate 可视化器内部,它似乎可以工作:

在此处输入图像描述

在此处输入图像描述

我可以在状态之间切换,但在实际应用程序中它不能回到它的初始状态(空闲)然后停留在那里。它总是转换回下一个。我不知道我做错了什么,但我已经在控制台记录了 formState getter,输出如下所示:

(它立即从空闲状态切换)

这是实现的基本示例:https ://codesandbox.io/s/boring-shape-b4lgk

0 投票
1 回答
67 浏览

typescript - Typescript/xstate:将对象拆分为可区分的联合

我有这种类型:

我想将每个属性转换为一个对象并创建一个有区别的联合。

所以它变成了这样:

你能帮助我吗。

0 投票
1 回答
61 浏览

javascript - 使用@xstate/test “缺少事件配置”

我正在使用基于模型的测试使用@xstate/testand来测试状态机@testing-library/react

基本上,我正在测试这台机器:

然后我正在配置模型,并使用const testPlans = itemDamagedModel.getSimplePathPlans();.

通过大约 200 个通过测试,一切似乎都运行顺利,但我遇到了一些问题:

  • 对于我的每个测试和每个事件,我都会收到警告Missing config for event "VALIDATE"。我不明白它应该是什么意思。
  • 即使我在模型活动中故意打错字,我的所有测试都会得到验证。有时测试的数量会减少,但我希望在模型找不到特定输入或按钮时看到一些警告。
  • 测试都通过了,即使我将一个空的 div 作为我的 xstate/test 渲染组件传递。
0 投票
1 回答
176 浏览

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

我正在探索 XState 世界并尝试重新创建本次演讲中提到的机器@davidkpiano

并且面临着正确进行过渡的问题。当我向父机器发送消息时,它会重置所有子机器。

例如:我希望机器在我一个接一个地触发CHANGEFOCUS事件后处于肮脏专注的状态。但是在发送FOCUS消息后,原始状态会重置回原始状态

我发现了这个问题,但是多个转换做同样的事情(正如它在问题本身中实际描述的那样)

另外,我不想将有关原始、聚焦和触摸状态的所有信息存储到 context 中,因为它不会像使用状态机那样安全。

下面的代码可复制粘贴到https://xstate.js.org/viz/

0 投票
2 回答
268 浏览

reactjs - xstate 将事件数据从服务传递到 onDone

我有 xstate 反应脚本,用户填写表格,然后按提交。提交时,xstate 收到了一个 send("VALIDATE", {formData}) ,它通过验证表单的服务运行。成功后,脚本将转换到目标:“成功”,我需要最终的“成功”状态来调用实际上保存脚本的外部函数。

我可以将数据获取到验证器函数中,但是在onDone之后,后续的成功状态似乎看不到数据。

如何将数据从验证事件连接到成功事件?

我通过以下方式触发验证:send("VALIDATE", formData)

0 投票
1 回答
200 浏览

node.js - 为什么 xstate 转换在 nodejs 中对我不起作用?

我有存储客户的列状态的客户表。其中 state=1 表示挂起,state=2 表示活动 state=3 表示停用,state=4 表示已删除,我必须根据操作管理数据库中的客户状态。我正在尝试使用状态机来检查当前状态下允许的操作。我做错了什么吗?请帮忙。提前致谢。

0 投票
2 回答
81 浏览

javascript - 是否可以在不使用当前状态的条件语句的情况下使用状态机?

我想使用当前状态映射到当前屏幕的状态机。我正在使用sveltexstate
以字符串为类型的示例:
App.svelte

machine.js

如何对纤细的组件而不是字符串做同样的事情?
而不是<p>{$toggleService.value}</p>这样的<$toggleService.value />

编辑:我尝试了什么:

  • 创建 Lobby 和 Login svelte 组件 Login.svelte

大堂.svelte

  • 在 machine.js 中使用它们
  • 在 App.svelte App.svelte 中使用状态机

我得到错误:

0 投票
1 回答
138 浏览

javascript - 为什么这个分配不触发?

在阅读了官方的 xstate 教程之后,我尝试实现我自己的机器,灵感来自xstate 的 dev.to上的这篇文章。

output除了似乎没有更新之外,一切都按预期工作。我认为这项任务没有完成它的工作。我忘记了什么?

编辑wandering-violet-obe1q

为了进行比较,这里有一个来自 xstate 的工作演示,其中上下文中的变量按预期更新。

有关分配上下文的更多信息 | XState 文档

我的代码: