关于 Store in Flux 的三个问题

Posted

技术标签:

【中文标题】关于 Store in Flux 的三个问题【英文标题】:Three questions about Store in Flux 【发布时间】:2018-07-27 02:48:24 【问题描述】:

在the flux concepts 之后,我们可以得到下一个我找不到解释的断言。

每家商店都会收到每一个动作。

为什么?我的建议:由于商店包含一些业务逻辑,我们必须为其提供所有可能的更改和数据,以便商店可以决定如何处理他们自己。

商店中的数据只能通过响应操作来改变。

为什么?我的建议:原因是在不响应操作的情况下违反单向数据流。

每次商店的数据发生变化时,它都必须发出一个“更改”事件。

为什么? 我不明白这一点。

【问题讨论】:

我不确定我能不能抓住你。但我的意思是,当我们改变数据而不是响应某个动作时,就会出现单向违规。例如:二传手。 感谢您的许可。我已经编辑了帖子。 【参考方案1】:

Flux 只是一种管理应用程序数据流的方式,因此开发人员应确保这确实发生。但我会尝试描绘为什么这些概念是 Flux 的一部分。

每家商店都会收到每一个动作。

如果您的应用程序中只有一个调度程序,则每个商店都会监听通过该调度程序调度的操作。商店是否应该对分派的操作采取行动取决于您,但为了能够对其做出反应,商店必须知道它

不过,并非所有操作都会导致商店发生变化。但是调度员根本不关心,因为它对商店的实现一无所知。它只是告诉所有商店发生了这个动作,用它做你想做的,或者继续你的生活而不关心

商店中的数据只能通过响应操作来改变。

您是对的,使用不同的方法可能会违反单向数据流。以这种方式做事可以确保应用程序的所有部分都具有基于发生的操作的正确状态。

如果不这样做,您会放弃其中一种通量优势。根据调度的操作更新您的商店,其他商店也将知道该操作已发生,并因此在他们愿意时对其做出反应。如果您直接更新商店,您最终将无法清楚地了解应用程序的哪些部分正在改变商店的状态。

每次商店的数据发生变化时,它都必须发出一个“更改”事件。

人们经常将通量应用程序中的商店描述为事实来源。当商店的数据发生变化时,数据可视化的基础也​​会发生变化。您希望确信,如果我的商店拥有一定的价值,这就是我的应用程序使用的数据。

这与这里的第一句话有关。商店不知道侦听器是否依赖于它的数据。通过发出变化,它会让所有听众知道嘿,我改变了。确保您拥有我的所有最新更改。如果您不发出更改,则侦听器最终可能会根据旧数据显示一些内容。


所有这些陈述都与同一件事相关:如果您的应用程序中发生了某个操作,请不要对您的应用程序的哪个部分想知道它的详细信息做出任何假设。确保每个人都可以根据需要采取行动。

【讨论】:

感谢您的详细解答。听起来您对通量架构非常了解。但是我可以建议您不是通量架构的作者。因此,我想在这里看到您所描述的与事实相似而不是陈述事实的证明链接。那么我在哪里可以找到 Facebook 对所描述概念的声明? 哦,对不起,如果我误解了你的问题。我实际上不确定 facebook 是否为这些概念提供了任何精确的描述。我猜他们在试图明确表示这只是一种模式时,会将其中的大部分内容留给用户。就我个人而言,在我了解 why 之前,我经历了相当多的 Flux 日常工作。我上面的回答主要是基于社区中的大量尝试/失败、教程和意见。

以上是关于关于 Store in Flux 的三个问题的主要内容,如果未能解决你的问题,请参考以下文章

Flux 设计模式 - 关于视图概念的歧义

关于redux应用

Flux:如何让一个 action 等待 store?

Flux - 在 Store 注册之前调度的操作

如何调用存储在 Store.js (React-Flux) 中的组件中的值

在 React Flux 上,我应该在哪里填充我的 Store 的初始状态?