问题标签 [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 投票
0 回答
27 浏览

javascript - 如何阻止历史重新路由

在我们的项目中,我们使用React Routerhistory包来管理路由。我们还使用xstate进行状态管理。我想知道是否不仅可以使用历史包检测路由更改,还可以阻止重新路由到另一个页面,以防有任何未保存的参数。这是我现在正在使用的一段代码:

但这只会在路由已经更改后阻止重新路由,例如我离开了我不应该离开的页面,然后重新路由被阻止。我想要做的是在路线实际改变之前阻止重新路由。这甚至可以从组件内部实现吗?我不想将此代码添加到<Route />组件或层次结构中的更高级别。

0 投票
1 回答
47 浏览

typescript - 有没有一种 TypeScript 方法可以从 xState 的状态中获取孩子?

目前我这样做:

useActor<SomeInterpreter>((state as any).children.SomeChild);

由于我不是 TypeScript 中“任何”的忠实粉丝,还有其他方法吗?

0 投票
0 回答
200 浏览

reactjs - Jest 快照测试在本地通过但在 Jenkins 上失败

我有一系列在本地通过的快照测试。但在 Jenkins 上,我的组件似乎正在呈现不同的快照。我的测试是:

我的组件:

我正在使用酶生成快照,而我的组件正在使用 xstate 机器。在本地测试时一切都很好,但是在 Jenkins 上我收到以下错误:

什么可能导致我的本地测试和远程测试之间存在差异?

0 投票
1 回答
20 浏览

xstate - xstate-如何从解释(机器).onDone()的数据中返回

我想从 onDone() 返回数据。我已经尝试过回复()功能,但它也无法正常工作。

0 投票
1 回答
107 浏览

javascript - 有没有办法在 useEffect 的反应组件中设置 xstate 机器的状态?

我有以下需要以下 React.js 组件:

  • 通过使用 fetch 调用服务器端 API 来保持单击按钮时的状态。
  • 当组件初始化时,调用后在组件中设置状态useEffect,使用 fetch 调用服务器端 API 以获取对象的当前状态。

这是组件的显示


状态按钮


这是我到目前为止所拥有的。

0 投票
1 回答
102 浏览

javascript - 无法使用 xstate 恢复具有持久状态的状态机并做出反应

我正在尝试创建一个状态机,它可以在任何给定时间点保留机器的状态详细信息,然后在重新访问页面时使用持久的状态和上下文值恢复机器。Xstate 文档提到了使用本地存储来持久化数据和补水,但我无法这样做。我制作了一个沙盒链接来尝试复制该问题。有人可以帮助或指导我可能做错了什么吗?

提前致谢

Codesandbox 链接:https ://codesandbox.io/s/green-snow-ortw6?file=/src/App.js

0 投票
1 回答
27 浏览

reactjs - Redux 的状态图

当前状态管理堆栈:React、RTK/Redux 和 Redux-Saga

这是高级问题。我们有一个复杂的流程,我们没有 QA 工程资源来编写所需的集成测试。这会导致以下问题:

  • 在此流程中更改某些内容需要很多上下文(不引入错误)
  • 必须手动测试流程中的许多不同路径以尝试确保没有任何损坏
  • 效率严重不足
  • 即使有专门的 QA 工作,错误仍然会通过有多少路径进入生产环境

我一直在研究 xstate 并且非常喜欢生成状态图的能力(需要更少的上下文,非技术利益相关者的理解,并且似乎它会导致更高的效率前进)。对于状态管理,我们目前在整个平台上使用 Redux(更改它会非常超出范围)。这引出了我的问题:

  • 有谁知道一个(支持良好的)npm 包,我可以在其中将 Redux 与状态图集成?
  • 如果不是,那么实现 xstate 和 Redux 的优缺点是什么?Xstate 只适用于这个流程,并且需要从 Redux 中提取一些数据。虽然 Redux 状态可用于 xstate,但我假设我不需要以 Redux 依赖于 xstate 的方式编写它。

我对 xstate 不是很熟悉,但如果这最终成为浪费时间/糟糕的想法,我不想深入研究。

ALSO - 对于上下文,这是一个非常大的 repo & 解决方案需要可维护、可读,最重要的是 - 可扩展

ALSO 2 - 主要目标是自动生成的状态图。我们在这个流程中有很多人参与,手动更新文档是不可行的

0 投票
0 回答
20 浏览

javascript - 可靠地测试动作

我正在使用 xstate 来实现登录流程。我有一台机器,initialState 调用 Promise,如果它被拒绝,它将重定向到具有entry操作的状态。我想测试是否在正确的时间正确调用了该操作。

机器.ts

machine.spec.ts

通过将期望包装在 setTimout 周围,我设法使它以一种丑陋的方式工作。

我想知道是否有更好的选择?谢谢

0 投票
0 回答
18 浏览

xstate - 如何调用具有调用该机器的机器的上下文的机器?

首先,是代码。我需要修复。


基本上有两台机器:

  • currentStateMachine
    • 目前,我想send根据真实状态每秒手动更改一次状态(运行命令);
    • 稍后,最好运行一个回调函数,基于该回调函数会改变状态,但是,目前我不知道它是否可以这样工作;
    • context用来存储当前时间戳和状态;
    • intervalsMachine问题:如何调用contextof currentStateMachine
    • 问题:在接受另一个状态事件之前会currentStateMachine等待完成吗?invoke还是会等到状态处理完毕,然后才处理新事件?
  • intervalsMachine
    • 每当接收到新状态时,它都会从当前状态创建一个间隔;
    • 它用于context存储startTime时间间隔、其length和该时间间隔内的状态;
    • 为演示而简化了区间计算,但会复杂得多。

TL;博士

  1. 如何用(调用机器)调用(调用intervalsMachine机器)?contextcurrentStateMachineintervalsMachine

  2. 在接受另一个状态事件之前会currentStateMachine等待完成吗?invoke还是会等到状态处理完毕,然后才处理新事件?

0 投票
1 回答
17 浏览

reactjs - 在 React 中使用 XState 检查当前机器状态的问题

我试图从反应组件(state.value)中的函数内部检查机器状态,但它永远不会改变当前状态,它总是打印初始状态,但是如果我在组件中放置一个 onClick 事件并调用控制台。日志(状态。值),它的工作原理......我做错了什么?