在“回流”中,行动的目的是啥?

Posted

技术标签:

【中文标题】在“回流”中,行动的目的是啥?【英文标题】:In "Reflux", what purpose do actions serve?在“回流”中,行动的目的是什么? 【发布时间】:2015-08-12 07:30:18 【问题描述】:

我熟悉 Flux 架构和 Reflux - 更简单的版本,没有调度程序 - 用于 ReactJS。

在完整的 Flux 中,听起来动作具有(或至少可以具有)明确且重要的目的:它们可用于更新外部服务(例如,通过API),如本问题所述:Should flux stores, or actions (or both) touch external services?

然而,在 Reflux 中,动作绝对只是愚蠢的消息解析器。所以我的问题是,它们的目的是什么?为什么要拥有它们?如果你的 Views/Components 直接在你的 store 上调用方法会发生什么坏事?

我即将将我的小应用程序从 Flux 转换为 Reflux,看起来我会将当前操作中的所有逻辑转移到商店中。在我看来,Reflux 中的操作除了充当组件和商店之间的无用中间人外,什么也没做。我错过了什么?

【问题讨论】:

"如果你的视图/组件直接在你的商店中调用方法会发生什么坏事?" --- 你不会有一个单向循环。所以你首先不会有 Flux。您缺少的是操作处理程序可能根本不会更改商店。或者可能不仅改变商店。 “除了充当组件和商店之间无用的中间人之外什么都不做” --- 他们这样做:他们将您的演示文稿与数据分开。 有道理。将其添加为答案,我很乐意接受。 这太少了,不能成为一个真正的答案,我也懒得给出一个合适的答案。让我们看看有没有比我更热情的人来这里;-) 对于其他阅读本文的人,我应该补充一点,多个商店也可以监听相同的操作 - 所以这是分开操作的另一个原因。 【参考方案1】:

除了在 OP cmets 中指出的在任意数量的商店中侦听操作的能力之外:

回流操作也可以触及 API 等,例如将其放在 preEmit action hook 中。通常,您会创建一个异步操作,在 preEmit 挂钩中添加一些异步内容,然后在异步工作完成(或失败)时调用“完成”或“失败”子操作。当然,您也可以在 preEmit 挂钩中进行同步工作。想到了日志记录。

也完全有可能在 store 中监听一个动作并在 store 中执行异步工作,然后从那里调用 .completed 或 .failed,但我认为已经形成的共识是 store 不应该这样做工作,商店应该只对变化的数据做出反应,而不是执行业务逻辑。

异步操作也是work as promises。当然,你也可以实现你的存储来做到这一点,但我认为这对数据存储来说是很多责任。

【讨论】:

以上是关于在“回流”中,行动的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

什么是波峰焊和回流焊

如果没有延迟初始化,回流触发器将无法工作

javascript 减少回流

影响回流、重绘的 CSS 属性都有哪些?

页面重绘和回流以及优化

前端回流与重绘之简介