在用于 scalajs 的 Diode 库中,Action、AsyncAction 和 PotAction 之间的区别是什么,哪些适用于身份验证?

In the Diode library for scalajs, what is the distinction between an Action, AsyncAction, and PotAction, and which is appropriate for authentication?

scalascalajsDiode 中,我使用过但不完全理解 PotAction class 并且最近才发现 AsyncAction class,这两者似乎在涉及异步请求的情况下都受到青睐。虽然我明白这一点,但我并不完全理解设计决策和命名选择,这似乎表明用例范围更窄。

具体来说,AsyncActionPotAction 都需要一个 initialModel 和一个 next,就好像它们都在为某种可刷新、可更新的内容建模异步请求而不是 CQRS 意义上的命令。顺便说一句,我有一个

我有几个具体的用例。我想知道如何将 PotAction 与以下任何一项结合使用的草图(不要求实施,只是概念):

所有这些在本质上似乎与我使用 PotAction 时看到的有点不同,但我真的很想使用它,因为它已经在我渲染一些基于关于 Pot.

的当前状态

从历史上看,PotAction先出现,后来AsyncAction被泛化出来(支持PotMapPotVector),这可以解释他们的关系有点。两者都为处理检索远程数据的异步操作提供抽象和状态处理。所以它们是为一个非常具体(和常见)的用例创建的。

但是,我不会将它们用于身份验证,因为这通常是您在加载应用程序或从服务器请求的任何数据之前就要做的事情。

表单验证通常是同步的,您不会在用户做其他事情时在后台执行,所以再次 Async/PotAction 不是很好的匹配,也没有提供太多附加值。

最后,对于远程命令用例,PotAction 可能是一个不错的选择,假设您想在用户准备好时向他们显示命令的结果。也许 PotStream 会更好,具体取决于命令是生成稳定的数据流还是仅生成一条消息。

在大多数情况下,您应该使用各种 Pot 结构来实现它们的目的,即获取和更新远程数据,并可能应用一些想法或内部模型(例如重试机制)到其他请求类型。

所有 Pot 的东西都从 Diode 核心中分离到它自己的模块中,以强调它们只是使用 Diode 的方便助手。开发人员可以自由地为新用例创建自己的助手(并回馈 Diode!)。