【问题标题】:Why do we need dispatcher in Flux?为什么我们需要 Flux 中的调度程序?
【发布时间】:2017-01-28 01:02:50
【问题描述】:

这不是 React 特定的问题。我正在考虑在 Aurelia/Angularjs 中实现 Flux。

在阅读通量时,我不相信调度程序步骤的必要性。为什么组件不能直接调用 store 来更新和检索数据?这种方法有什么问题吗?

例如:如果我有一个CarStore 可以创建新车、更新汽车并获取汽车列表(只是 CRUD api 上的一个薄层),我应该能够直接检索/更新列表从car-grid 组件调用商店。由于 store 是一个单例,每当列表更新时,car-grid 应该会自动获取新项目。在这种情况下使用调度程序有什么好处?

【问题讨论】:

    标签: reactjs aurelia flux


    【解决方案1】:

    我使用 React-native 和 Redux 作为存储/视图状态更新器创建了几个大型应用程序。

    无论如何,调度操作都是同步的。使用调度程序有一个很大的缺点,您会丢失函数签名。 (调试、自动捕捉类型错误、重构丢失、同一函数的多个声明,不胜枚举)

    永远不必使用调度程序,它不会引起任何问题。在操作中,我们只需调用 getState().dispatch。无论如何,这家商店是单身人士,强烈建议您不要拥有多家商店。 (你为什么要这么做……)

    【讨论】:

      【解决方案2】:

      您可以看到here 为什么调度员很重要(查看为什么我们需要调度员部分)。在我看来,这个想法基本上是能够以同步方式访问各种存储(一个回调在调用另一个回调之前完成)。这要归功于waitFor 方法,它允许您等待商店完成处理操作(或更多棕褐色)。有一个很好的例子in the docs。例如,您的应用程序可能会增长,而不是只有那个 CarStore,您还有另一个 Store,其更新依赖于 CarStore 更新。

      【讨论】:

      • 为什么不能在组件中管理该依赖关系?例如,如果您想更新多个相互依赖的商店,您可以使用 Promise。
      • 例如,当汽车被添加到CartStore 时,我们需要从WishlistStore 中删除它。从您的组件中,您可以将汽车添加到 CartStore,它返回一个承诺,当它成功时您更新 WishlistStore
      • 我猜你可以这样做,但是 Flux 为你提供了调度程序和功能,作为一种工具,使它更容易。在极端情况下,您可以使用纯 JavaScript 完成所有操作,框架只是为您提供一些工具和模式,使其更容易和/或更好地组织。
      • 我明白了。我只是对以这种方式组织程序的基本原理感到好奇。
      • 在我看来,调度程序具有所有那种逻辑,并不是每个 Flux 用户都在组件上按照他的意愿进行操作。这是一种常见的情况,使用相同的方法解决它通常会有所帮助。
      【解决方案3】:

      如果您只拥有一家商店,那么我认为调度员是多余的。但是,如果您有多个商店,那么调度程序很重要,这样操作就不需要了解每个商店。

      请注意,如果您只有一家商店,我并不是说您应该放弃调度员。这仍然是一个很好的模式,因为如果您将来需要,它可以让您选择支持多个商店。

      【讨论】:

        猜你喜欢
        • 2016-06-25
        • 2016-03-16
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        • 1970-01-01
        • 2017-12-27
        相关资源
        最近更新 更多