#4941·xstate

错误: Svelte 的快照存储不一致

作者: phcoliveira创建于 2024年6月14日更新于 2025年10月7日
标签bug

X 状态版本

X状态版本 5

说明

在使用SvelteKit 4的项目中,我即将完成XState升级为v5. 然而,我发现了一些我使用X State v4时没有的问题.

之前,我有很多这样的事, 而且他们以前工作很好。 丝绒 脚本 > 从“ xstate/ svelte” 导入{useMachine} ; 从“ $app/ navigation ” 导入 {goto} ;

从'./foo.ts'导入{fooMachine};

const {state} = 使用机器( fooMachine); (简体中文)

如果 $. matches( “ 活动 ”) ) < slot /> (秒数) {: else} 时间轴: 等待去('/某处/去 )] 正在装入 {/await}(等待着) {/if} (英语).


现在,用v5,`$snapshot'店似乎没有正常工作,或者至少不够快,因为我得到无休止的重定向循环。

为了修理他们 我不得不这么做

丝绒
脚本 >
从“ @ xstate/ svelte” 导入{us Actor, 使用Selector} ;
从“ $app/ navigation ” 导入 {goto} ;

从'./foo.ts'导入{fooMachine};

Const { actor ref} = 使用 Actor(fooMachine) ;
Const为Aactive = 使用Selector( actor Ref, (snapshot)) {
返回快照. matches ("活性");
* ;
</script> (简体中文)

如果有的话
< slot /> (秒数)
{: else} 时间轴:
等待去('/某处/去 )]
正在装入
{/await}(等待着)
{/if} (英语).

预期成果

" 使用者() " 归还的 " $sessionSnapshot " 商店应与 " 活跃 " 国家相符。

实际结果

" $sessionSnapshot " 商店仍处于初始状态: " 不活跃 " 。 然而,使用`useSelector()'更新了新的订阅。

  • 复制

https://codesandbox.io/p/GitHub/phcoliveira/xstate-snapshot- problem/main? 进口=为真.

其他背景

需要退出的主要文件有:

src/lib/需要激活/需要激活. svelte.
src/路由/激活/+page.svelte

但请仔细看看

有办法绕过这个 例如,在机器的逻辑中拥有承诺,并且发送一个事件,通常也是有效的.

但我在第一个文件中包含了一个奇特的修饰,它使用Selector而不是使用用Actor返回的快照.

我无法证实它曾经和X State 4合作过, 因为那时我有一个机器里面有这么多演员(服务, 在升级到XState 5时,我把它们肢解了,以便制造出更小的机器并减少最初的捆绑尺寸.

内容来源: statelyai/xstate