【问题标题】:Flux calling actions with arguments managed in storeFlux 调用带有在存储中管理的参数的操作
【发布时间】:2016-03-05 22:57:27
【问题描述】:

假设我有一个动作someAction(params) 需要params,它在商店paramsStore 中进行管理:

paramsStore.listen(function(params) { 
  someAction(params)
}) 

在我看来,我似乎不能只调用它,因为这显然违背了 Flux 的做事方式(不应在商店侦听器中调用操作)。

我在 store 监听器中有 someAction 的原因是因为我希望每次修改 paramsStore 时都调用它。我怎样才能在不诉诸于商店监听器中调用动作的“非模式”的情况下实现这一点?

【问题讨论】:

    标签: javascript reactjs flux


    【解决方案1】:

    正确的“流动方式”是在信息发送到paramsStore 的任何地方调用someAction(params)

    了解someAction 所做的事情将更加清晰。真的需要行动吗?如果您只是对存储数据进行一些操作,则可以将其作为paramStore 中的本地方法。

    【讨论】:

      【解决方案2】:

      虽然我也是 Flux 的新手,但我可以提供一个建议。确定商店 A 持有的操作的结果所需的状态可以附加到 get 方法。这个状态可以通过一个带有 getter 的 View 来检索。当动作被调用时,这个状态可以作为参数发送。如果某些事情需要异步,现在可以根据状态在此处完成(ajax 调用或其他)。然后可以使用 this 的结果或 promise 对象来触发传递给调度程序的操作。调度程序将结果或承诺发送到商店。然后存储更新其状态,并根据需要重复该过程(当触发初始操作时)。

      我认为更详细地了解您究竟需要什么实际上会有所帮助。我确实相信监听一个动作并在商店内触发另一个动作与通量不一致。我确实认为可能有一种方法可以使用通量实现您想要的实际结果,但如果没有更多细节,这是我能想到的最好的方法。此外,实际上您可以实现任何您想要的。 Flux 只是一个模型,并且通过扩展一个自我施加的约束来帮助结构。

      【讨论】:

        【解决方案3】:

        如果您按原样使用 Flux,您可以参考https://github.com/facebook/flux 处的整个架构的原始图像。

        如您所见,不仅视图可以创建操作。还有可以创建的 Web API Utils。一般来说,不仅 API 工具可以做到这一点。创建动作以根据外部世界、某些服务或其他东西启动某些行为是完全可以的。

        但在您的情况下,您正在尝试在某个商店更新侦听器上创建一个操作。据我了解,这将导致一家或几家其他商店发生一些变化。在这种情况下,您可能不需要在侦听器中创建操作,而是使用 waitFor API 在您的商店之间创建一些关系。这是一个包含详细信息的链接:http://facebook.github.io/flux/docs/todo-list.html#adding-dependency-management-to-the-dispatcher

        【讨论】:

          猜你喜欢
          • 2014-09-03
          • 2014-07-25
          • 2015-05-03
          • 2015-07-11
          • 2015-12-08
          • 1970-01-01
          • 1970-01-01
          • 2021-08-28
          • 2011-10-20
          相关资源
          最近更新 更多