问题标签 [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.
statechart - Xstate:导致相同状态的不同动作和守卫
我正在用 xstate 库编写状态图。
状态图代表一个中等复杂的 UI。
我有几个平行状态,但对于这个问题,我们只考虑两个:
SelectionStatus
, 表示选择项,区分子状态SelectedNone
, SelectedOne
, SelectedMany
.
Operation
,表示当前正在进行的操作。它有一个名为Idle
(当然还有其他一些)的子状态。
有一些事件会触发循环回到Idle
子状态的动作,而不是去另一个状态。让我们将它们视为即时操作,例如removeSelected
仅删除所选项目的操作(这就是问题的重点)。
removeSelected
如果选择仅限于单个项目(实际上是树中的一个节点)或多个(树的一个分支),我将向事件添加条件以执行不同的操作。
用于描述事件的动作和条件的 xstate 语法将是:
问题是我Idle
在同一对象嵌套级别编写了两个键,这是无效的。
我已经考虑重组状态图以将两个操作分支作为选择分支的子状态,但这似乎比问题更糟糕。
我也考虑过使用像RemovingOne
and这样的中间虚拟状态,RemovingMany
它只会触发返回到 的转换Idle
,但我对它不太满意。
我可以通过删除保护条件来解决这个问题,在通用removeOneOrMany
动作处理程序中进行测试,但是我会丢失状态图中不同处理的信息。
有人有类似的问题,可以提供一些建议吗?
(注:这里指的是当前版本的xstate,也就是3.1.1,3.2差不多了,不知道能不能更容易处理这种情况)
谢谢!
javascript - redux 和状态机(例如 xstate)之间的实际区别是什么?
我正在研究一种中等复杂度的前端应用程序。目前它是用纯 javascript 编写的,它有很多不同的基于事件的消息连接这个应用程序的几个主要部分。
我们决定在进一步重构的范围内为此应用程序实现某种状态容器。以前我有一些使用 redux 和 ngrx store 的经验(实际上遵循相同的原则)。
Redux对我们来说是一种选择,但其中一位开发人员建议使用基于状态机的库,特别是xstate 库。
我从未使用过 xstate,所以我发现它很有趣,并开始阅读文档并查看不同的示例。看起来很有前途和强大,但在某些时候我明白我没有看到它和 redux 之间有任何显着差异。
我花了几个小时试图找到答案,或者比较 xstate 和 redux 的任何其他信息。我没有找到任何明确的信息,除了一些文章,如“从 redux 到状态机” ,或者专注于同时使用 redux 和 xstate 的库的链接(很奇怪)。
如果有人可以描述差异或告诉我开发人员何时应该选择 xstate - 欢迎您。
reactjs - 在 xState 操作中设置上下文并触发方法
我有一个处理输入表单的简单状态机
我希望该submitComment
动作触发一个函数,然后在上下文中重置一个字段,如下所示:
这行不通。
它会触发我传入的方法,但不会使其进入分配位。
我可以在一个动作中做两件事还是应该创建两个单独的动作?
xstate - 在 xState 中将事件从一台机器发送到另一台机器时传递值
我有一个调用 todoMachine 的简单聊天机器。todoMachine 有一个名为“OPENED_TASK_LIST_CREATOR”的事件,我想从 chatMachine 调用它。我已经设法弄清楚了。
我遇到的问题是我想与“OPENED_TASK_LIST_CREATOR”事件一起发送一个值。即我要打开的列表ID。我已经设法(ctx, e) => console.log('e.payload', e.payload),
在发送操作上方记录了它COMMENT_STARRED
。
有没有办法传递e.payload
给send('OPENED_TASK_LIST_CREATOR', { to: 'todo' })
我可以使用 todoMachine 中的值?
javascript - 使用上下文的问题
我正在努力理解为什么使用 assign 设置 Context 并不总是有效。我有一个非常简单的应用程序,您可以在这里找到https://codesandbox.io/embed/y0xk1mo9x9
我有这样的背景:
由这些功能更新:
decrementNextSelectItem
(与事件 UP_KEY 绑定 - 按向上箭头)和incrementNextSelectItem
(与事件 DOWN_KEY 绑定 - 按向下箭头)被正确调用:
但是updateCurrentSelectedItem
(与事件 OK_KEY 绑定 - 按 'o' 键)神秘地无法按预期工作:
有什么理由吗?我快疯了。
javascript - 使用发送内置操作
我不明白“发送”内置操作的含义和用法。你可以在这里看到https://codesandbox.io/embed/7467qk4rox一个非常简单的例子,一台机器有两个并行的状态节点;第二个使用 send 内置动作发送事件,但这个动作似乎没有被捕获,在第一个状态节点中也没有,在第二个状态节点中也没有。
你能帮忙吗?
xstate - 我可以在 xstate 的不同状态下有不同的值吗
我有很多这样的代码:
我想知道是否可以使用 xstate 来清理它?我可以有 3 个状态
到目前为止,我有这个:
但是价值在哪里呢?我会把它们放在上下文中吗?
node.js - XState:等待调用函数的响应
我计划在我的应用程序后端使用 XState 来管理状态。调用 api 时,将在成功更改状态时调用函数。函数调用的结果必须作为 api 的响应返回。
我希望将其输出getUserFriends
作为我的 api 的响应发送。如何等待转换和所有调用完成?
typescript - typescript - 如何在特定位置扩展接口(扩展库 xstate 的基本状态)
我希望能够在一个或多个特定位置扩展基本接口。这个想法是能够为库 xstate 定义一个基本状态,可以将其扩展用于更具体的目的。
我有
我想知道打字稿是否可以在特定位置扩展基本接口。例如“空闲”属性
所以结果是
我知道我可以像这样在 Typescript 中定义 Generic
但我希望能够为状态“空闲”(例如)定义特定的基本属性,而不是每次都完全实现它。