0

问题的简短版本:

我可以从商店触发 UI 操作吗?

问题的长版本:

我正在编写带有回流的送餐应用程序。似乎我不太了解我的应用程序中的操作应该如何进行。

我有 BasketStore、StatusOverlay(组件)和操作:

// BasketStore actions
basketSync
basketSync.Completed
basketSync.Invalid
basketSync.Failed

// StatusOverlay actions
statusOverlayOpen
statusOverlayClose

该应用程序的工作方式如下:

我按下按钮并发送basketSync动作。一旦发生,就会开始显示覆盖BasketStore并将数据请求发送到服务器。

然后根据服务器响应我触发basketSync.completed, basketSync.failed, basketSync.invalid. 当它无效或完成时,我关闭覆盖,否则我显示另一个覆盖。

问题是我应该如何管理操作?我应该听basketSync里面的StatusOverlay来打开它并关闭它basketSync.completedbasketSync.invalid 或者最好听一下statusOverlayOpenstatusOverlayClose 然后在里面的某个地方触发这些动作BasketStore

4

2 回答 2

3

简短的回答:在标准的 Flux 架构中,Flux 商店应该只发出一个简单的 CHANGE 事件,所以,不,你不能从商店中触发 UI 操作。

于 2015-05-31T00:26:05.577 回答
2

我已经看到商店在许多 Flux 应用程序中触发操作。有些人喜欢将他们的异步工作放在动作创建者中,并在异步工作的回调中触发“完成”和“失败”“子动作”,其他人将异步工作放在存储本身中,在这种情况下触发子- 从那里采取行动。正如我所看到的,它们的关键点是,在回调中你应该触发一个新的 action,而不是直接更新状态,这样数据突变只会作为动作的影响发生,而不是异步回调。

但是话虽如此,组件通常根本不应该听动作。他们应该只收听商店的更新并以任何必要的方式反映该更新。因此,根据上面提到的几点,商店可以监听“完成”或“失败”的动作,并适当地更新它们的状态以反映“完成”或“失败”的动作。然后组件根据商店的状态而不是直接根据操作呈现任何“错误”指示。

于 2015-07-14T09:59:25.387 回答