在存储中管理参数的Flux调用操作

时间:2015-12-01 21:11:48

标签: javascript reactjs flux

假设我有一个someAction(params)的操作需要params在商店paramsStore中管理:

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

似乎我不能在我的视图中调用它,因为这显然违背了Flux的处理方式(不应该在商店监听器中调用操作)。

我在商店监听器中有someAction的原因是因为我希望每次修改paramsStore时都要调用它。如何在不诉诸“模式”的情况下实现这一目标。在商店监听器中调用操作?

3 个答案:

答案 0 :(得分:1)

正确的"流动方式"这样做就是在someAction(params)发送信息的地方调用paramsStore

了解someAction的作用会更清晰。它真的需要成为一个行动吗?如果您只是在商店数据中进行一些操作,则可以将其作为paramStore中的本地方法。

flux architecture

答案 1 :(得分:0)

虽然我不熟悉助推器,但我可以提出一个建议。确定商店A持有的操作结果所需的状态可以附加到get方法。可以通过带有getter的View检索此状态。调用操作时,可以将此状态作为参数发送。如果某些东西需要异步,现在可以根据状态来完成这里(ajax调用或其他)。然后,可以使用此结果或promise对象来触发传递给调度程序的操作。调度程序将结果或承诺发送到商店。然后商店更新其状态,并根据需要重复该过程(触发初始操作时)。

我认为你需要什么的更多细节实际上会有所帮助。我相信倾听一个动作并在商店内触发另一个动作并不与通量相符。我认为有可能用一种方法来实现你想要的实际结果,但没有更多的细节,这是我能想到的最好的结果。而且,实际上你可以实现你想要的任何东西。 Flux只是一个模型,并且通过扩展自我约束来帮助构建。

答案 2 :(得分:0)

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

正如您所看到的,不仅视图可以创建动作。还有Web API Utils可以创建一个。一般来说,不仅API utils可以做到这一点。为了根据外部世界,某些服务或其他东西开始某些行为,创建行动是非常有用的。

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