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

xstate - 如何使用 xstate 建模多个页面

我正在尝试使用 xstate 构建一个真实世界的应用程序,但在为应用程序启动建模时遇到了麻烦。

用户可以通过键入www.ex.com进入应用程序开始进入主页,但用户也可以进入应用程序www.ex.com/any-page

有人可以举一个具有多个页面的建模应用程序示例吗

用户可以在登录页面或主页上未经身份验证,但不是安全页面

或者

用户可以通过身份验证并在任何页面上

我希望每个页面都有自己的状态,这就是提示问题的原因。

0 投票
1 回答
199 浏览

angular - 如何设置 Xstate 以在 Angular 中使用 Redux Dev Tool

我在 Angular 项目中使用 xstate 进行状态管理。我做了

启动我的机器时,但 redux 开发工具没有从我的项目中获取任何事件。除了添加 redux 扩展外,是否需要任何其他设置。

0 投票
1 回答
126 浏览

reactjs - 将 useMachine 与 useContext 结合使用

我正在开发一个 UI 项目,该项目通过共享上下文处理状态更新,与此处描述的非常相似

对于某些组件,我不会通过 xstate 来玩弄状态机。

现在,理想情况下,我希望我的状态机在进入状态时调度某些事件。但是,状态机获取我的 AppContext 的最佳方式是什么?

目前,我正在处理组件本身的这个事件调度,观察状态机的状态并在它进入某个状态时根据需要调度一个事件:

这很好用,但它给我的印象是糟糕的设计。我认为直接从状态机而不是从组件分派这个事件会更干净。

状态机有什么好的方法来获取 AppContext 吗?

简单地为状态机创建一个工厂方法,将调度作为参数并保留它是否明智?

0 投票
1 回答
108 浏览

javascript - 在哪里/如何进行单元测试和 xstate 保护功能?

我在状态机中使用了保护功能。

我想对这个守卫进行单元测试(出于问题的目的,我已经对其进行了简化)以确保它始终按预期工作(可能有人会更改上下文结构,或者从导致 data.number 的服务器返回到事件等)。

在哪里/我该怎么做?xstate 是否有常规模式?或者我应该在我想要的地方做一个完全独立的单元测试?

0 投票
1 回答
858 浏览

javascript - 有没有办法使用从 Firebase 返回的承诺来初始化 Xstate 状态机?

我正在尝试使用 Firebase 保持状态。我目前正在使用“saveState”功能,该功能可以正常工作并将最新状态正确保存到 Firebase。

现在我希望能够根据 Firebase 中最近保存的状态来初始化状态机。在下面的代码中,我尝试使用我的“loadState”函数为 Xstate 提供一个配置对象。它目前返回一个带有正确状态配置的承诺。

这是我的“保存状态”代码:

这是我的“loadState”函数,它从 Firebase 返回一个带有正确配置信息的承诺。

现在我的问题是尝试使用上面的“loadState”函数加载 Xstate。在这里,我尝试使用 useMachine React 钩子:

我最终得到错误:“TypeError:无法读取未定义的属性'数据'”,我相信这是因为承诺尚未解决,导致尝试读取未定义的值。

这甚至可能吗,还是我做错了?

我对这一切都很陌生,任何指导将不胜感激。谢谢你。

0 投票
1 回答
986 浏览

javascript - xstate:如何将状态初始化为特定节点?

我有一个多步骤表格,基本上有这些基本步骤:select services -> contact -> billing. 当用户更改他们所在的步骤时,我会显示一个进度条并发出事件,这是我当前使用 xstate 的基本模式:

这是可视化: 在此处输入图像描述

在我的反应组件中,我观察这个服务的变化,pathname所以我可以推送到历史记录

但是,问题是:每当我重新访问一条路线(例如,我直接导航到/billing)时,它会立即将我带回/select-service. 这对我的代码来说是有意义的,因为初始状态和订阅会这样做。

我将如何在特定节点初始化状态机?

0 投票
2 回答
778 浏览

javascript - xstate 中的参与者和调用服务有什么区别?

我对 xstate 中演员和调用服务之间的区别有点困惑,因为它们在我看来是一样的。

0 投票
1 回答
406 浏览

javascript - Xstate 收到警告:未找到操作类型的实现

ADD_THOUGHT_TIME_STAMP我在两个不同的州有类似的行动,所以我尝试通过休耕官方文档actions来将该行动转移到xStat 中。

但我不断收到错误消息:“找不到操作类型 addThoughtTimStamp 的实现”

这是有效的代码:

这是不起作用的代码:

我错过了什么?

PS如果您在我的代码中看到其他问题,请随时发表评论,谢谢。

0 投票
0 回答
89 浏览

reactjs - 当我运行 npm test 时,xstate 不会改变我机器的状态(如果我运行应用程序,它会正常工作)

我有这个组件

我有这台机器

我有这个后卫

我有这个动作

我有一个自定义渲染

最后我有我的测试文件

当我跑步时,npm test我注意到以下内容:

  • 在触发 TOGGLE 事件之前,守卫被调用了两次
  • 该动作永远不会被调用
  • xstate 从不改变我的复选框组件的状态
  • UNCHECKED 状态的 meta.test 被调用了两次并且可以正常工作
  • CHECKED 状态的 meta.test 被调用一次并失败

给你日志

提前致谢!

0 投票
0 回答
22 浏览

jestjs - 跨多个进程传播生成的测试?

我正在使用jest来运行我的测试,并且一直在尝试由@xstate/test. 这基本上涉及创建一个状态图,表示我的应用程序的所有可能状态、在它们之间转换的事件等。然后它使用给定的事件生成通过状态图的所有可能路径,您可以将其转换为大量测试。

这很酷,但我遇到的问题是随着测试范围的扩大,它们的数量正在迅速增加。Jest 支持通过多个进程运行测试,但不幸的是,它只能通过基于测试文件的拆分来实现。由于我只有一个基于模型的睾丸的测试状态图,它全部包含在一个文件中,并且所有内容都在一个进程中连续运行。这变得很慢

有没有办法让笑话将大量生成的测试分成单独的进程?我有一个方法的想法,它基本上会使用存根测试文件,然后包含一个主文件,该文件可以吐出所有需要运行的测试。不幸的是,虽然您可以检查process.env.JEST_WORKER_ID测试中没有办法告诉我有多少工作人员,所以任何单个工作人员都不知道它应该运行多少测试。

有没有人巧妙地解决了这个问题?甚至可能吗?我应该放弃使用 jest 并jest-worker处理多线程并做我自己的骇人听闻的事情吗?