【问题标题】:Flux architecture misunderstanding in example chat app示例聊天应用程序中的 Flux 架构误解
【发布时间】:2014-12-05 09:58:08
【问题描述】:

我正在尝试理解Flux example chat app。作者提到了这种单向数据流:

但是,在示例应用程序中,Action Creators (ChatMesssageActionCreator) 和 Stores (MessageStore) 之间以及 Stores (MessageStore, ThreadStore) 和 Web API Utils ( ChatMessageUtils),这似乎违反了单向数据流规则:

是否建议遵循给定的示例,还是应该设计一个更好的模式?

更新

我发现 ChatMessageUtils 不属于 Web API Utils,因此 store 中的两个箭头不应该指向那里,因此也许它们没问题。 但是 ActionCreators 和 Store 之间的联系似乎仍然很奇怪。

【问题讨论】:

    标签: javascript facebook reactjs-flux


    【解决方案1】:

    这个例子有点勉强,创建它的目的是为了展示 waitFor() 的工作原理。该示例的 WebAPI 方面相当不成熟,确实应该修改。

    然而,即使MessageStore.getCreatedMessageData(text) 将值传递给存储,它仍然是一个getter。它不是在商店中设置数据。它确实被用作实用方法,一个好的修订(拉取请求?)是将该方法移动到 Utils 模块。

    要改进现实世界的示例,您可以做几件事:

    • 从商店而不是从 ActionCreators 调用 WebAPIUtils。这很好,只要响应调用另一个 ActionCreator,而不是通过直接在存储中设置新数据来处理。重要的是让新数据起源 一个动作。数据如何进入系统比数据如何退出系统更重要。

    • 或者,您可能希望消息具有单独的客户端 ID 和服务器端 ID。这样做可能没有什么好处,比如管理乐观的渲染。在这种情况下,您可能希望在 Utils 模块中生成客户端 id,并将该 id 与文本一起传递给调度的操作和 WebAPIUtils。

    说了这么多,是的,这个例子需要修改。

    【讨论】:

    • 谢谢,详细易懂的答案,现在干净多了!
    • 我仍然对为什么商店需要直接调用 Web API Utils 感到有些困惑。假设商店处于某种状态,需要某种服务器调用。除非有人想使用它,否则该状态无关紧要。因此,您可以让 React 组件读取该状态并根据该状态触发操作。这里的好处是图表仍然正确。有没有什么方法可以让某人陷入困境?当然,总会有例外,但我想这只是一种可以明智地使用的反模式。
    • 我现在正在尝试解决这个问题,所以对于任何与 David Granado 一样关心的谷歌员工,我想要避免在组件层中执行 Check-Result & Call ActionCreator 的原因很简单;这意味着大量的样板代码分散在您的组件中。如果您在有一个未初始化的消息存储时总是要调用“getMessagesAction”,那么您最好将它放在该事实变得明显的中心位置;在商店的 Get 方法中。
    猜你喜欢
    • 1970-01-01
    • 2014-11-03
    • 2016-07-14
    • 2018-01-29
    • 2015-12-05
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多