微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

事件和行为的产物

如何解决事件和行为的产物

终于开始涉足函数式响应式编程的迷人世界。我来自 React-Redux 背景,想尝试在更纯的 FRP 上下文中实现一些我熟悉的模式。我开始对事件和行为之间的性质和区别形成一些理解;诸如

之类的问题

在这方面有所帮助。

但是,我在这些领域仍然是新手,并且有一个我不确定这些帖子是否能回答的具体问题。 (他们可能,我可能只是有点“吸收缓慢”,正如他们所说) - 我希望能够在结合给定行为的特定价值时对事件做出反应。我想另一种说法,正如我在标题中指出的,是我想知道这是否以及如何运作 -

Event * Behavior -> Event

例如,在 React-Redux 中,我可能有一个由一些远程 API 获取支持的项目列表。我会有一个 InitializeAction 被调度和减少,导致 isLoading 标志在当前状态下更新(行为 - 此时,项目正在加载);以及启动 API 提取的有效反应(事件 - 正在处理,导致提取)。我可以实现的一种方法是仅观察 isLoading,当它从 false 变为 true 时,启动提取。例如,connect 组件的 props 到 isLoading 并启动从该组件的 componentDidUpdate 方法提取

然而,这种方法并不是我想要找到的。我想在某种意义上,状态变化可以看作是 InitializeAction 事件和 isLoading 行为的产物的事件,但仅仅观察 isLoading 中的变化并不一定表明原因,只是结果。这只不过是肯定结果的形式逻辑谬误,如果其他一些动作也可能导致 isLoadingfalse 转换为 true,这对我没有帮助。当状态特别是 LoadItems 时,我希望有一个特定的 InitializeAction 事件作为此特定 isLoading == false 事件的结果而专门生成

我在 React-Redux 中处理这个问题的方法是加入 redux-loop 中间件,它允许声明性效果是来自 reducer 的附加结果,以及更新的状态。因此,当 isLoading == falseInitializeAction 发生时,reducer 的结果是 isLoadingfalse 变为 true,以及一个(纯的,尚未评估) API-fetch 效果声明。然后中间件仅将规范的更新状态返回给 Redux 并执行效果。我喜欢这种方法,它很容易推理,也是以声明方式以纯粹的方式管理效果的最佳尝试之一。如果,正如我所相信的那样,FRP 的优势之一是能够有效地处理效果,那么我将非常有兴趣了解它如何处理这种情况。

对不起这篇文章。我是这个主题的新手,所以我表达这个问题的能力可能还有很多不足之处。任何帮助将不胜感激。

编辑以澄清

这就是我想要的。事件发射器 A 发出动作事件 e_a。在时间 S 具有状态 b_t 的行为主体 t 计算、发出、存储下一个状态 b_(t+1)。另一个事件发射器 F 发出一个 eFfect 事件 e_f,当 e_a 被发射而 b_t 是当前状态时,该事件被发射。更新状态和效果事件都可以订阅

          S=b_t <------
           |           |
           v           |
A --e_a--> + --b_(t+1)-->...
           |
           v
           F --e_f-->...

解决方法

如果我理解正确的话,您想要实现的是启动提取操作的能力,启动提取后立即将 isLoading 标志设置为 true 并将其设置为 {{ 1}} 一旦获取返回或错误。

而且你想用 Reactive 风格来做到这一点。换句话说,您希望某些客户端能够订阅 false 标志更改以及由获取结果产生的 isLoading 上的更改。

如果这是真的,以下可能是基于 RxJs 的解决方案的架构。

state

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。