问题标签 [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.
javascript - 如何阻止历史重新路由
在我们的项目中,我们使用React Router和history包来管理路由。我们还使用xstate进行状态管理。我想知道是否不仅可以使用历史包检测路由更改,还可以阻止重新路由到另一个页面,以防有任何未保存的参数。这是我现在正在使用的一段代码:
但这只会在路由已经更改后阻止重新路由,例如我离开了我不应该离开的页面,然后重新路由被阻止。我想要做的是在路线实际改变之前阻止重新路由。这甚至可以从组件内部实现吗?我不想将此代码添加到<Route />
组件或层次结构中的更高级别。
typescript - 有没有一种 TypeScript 方法可以从 xState 的状态中获取孩子?
目前我这样做:
useActor<SomeInterpreter>((state as any).children.SomeChild);
由于我不是 TypeScript 中“任何”的忠实粉丝,还有其他方法吗?
reactjs - Jest 快照测试在本地通过但在 Jenkins 上失败
我有一系列在本地通过的快照测试。但在 Jenkins 上,我的组件似乎正在呈现不同的快照。我的测试是:
我的组件:
我正在使用酶生成快照,而我的组件正在使用 xstate 机器。在本地测试时一切都很好,但是在 Jenkins 上我收到以下错误:
什么可能导致我的本地测试和远程测试之间存在差异?
xstate - xstate-如何从解释(机器).onDone()的数据中返回
我想从 onDone() 返回数据。我已经尝试过回复()功能,但它也无法正常工作。
javascript - 无法使用 xstate 恢复具有持久状态的状态机并做出反应
我正在尝试创建一个状态机,它可以在任何给定时间点保留机器的状态详细信息,然后在重新访问页面时使用持久的状态和上下文值恢复机器。Xstate 文档提到了使用本地存储来持久化数据和补水,但我无法这样做。我制作了一个沙盒链接来尝试复制该问题。有人可以帮助或指导我可能做错了什么吗?
提前致谢
Codesandbox 链接:https ://codesandbox.io/s/green-snow-ortw6?file=/src/App.js
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 - 主要目标是自动生成的状态图。我们在这个流程中有很多人参与,手动更新文档是不可行的
javascript - 可靠地测试动作
我正在使用 xstate 来实现登录流程。我有一台机器,initialState 调用 Promise,如果它被拒绝,它将重定向到具有entry
操作的状态。我想测试是否在正确的时间正确调用了该操作。
机器.ts
machine.spec.ts
通过将期望包装在 setTimout 周围,我设法使它以一种丑陋的方式工作。
我想知道是否有更好的选择?谢谢
xstate - 如何调用具有调用该机器的机器的上下文的机器?
首先,这是代码。我需要修复。
基本上有两台机器:
currentStateMachine
:- 目前,我想
send
根据真实状态每秒手动更改一次状态(运行命令); - 稍后,最好运行一个回调函数,基于该回调函数会改变状态,但是,目前我不知道它是否可以这样工作;
- 我
context
用来存储当前时间戳和状态; intervalsMachine
问题:如何调用context
ofcurrentStateMachine
?- 问题:在接受另一个状态事件之前会
currentStateMachine
等待完成吗?invoke
还是会等到状态处理完毕,然后才处理新事件?
- 目前,我想
intervalsMachine
:- 每当接收到新状态时,它都会从当前状态创建一个间隔;
- 它用于
context
存储startTime
时间间隔、其length
和该时间间隔内的状态; - 为演示而简化了区间计算,但会复杂得多。
TL;博士
如何用(调用机器)调用(调用
intervalsMachine
机器)?context
currentStateMachine
intervalsMachine
在接受另一个状态事件之前会
currentStateMachine
等待完成吗?invoke
还是会等到状态处理完毕,然后才处理新事件?
reactjs - 在 React 中使用 XState 检查当前机器状态的问题
我试图从反应组件(state.value)中的函数内部检查机器状态,但它永远不会改变当前状态,它总是打印初始状态,但是如果我在组件中放置一个 onClick 事件并调用控制台。日志(状态。值),它的工作原理......我做错了什么?