问题的简短版本:
我可以从商店中激活UI操作吗?
问题的长版本:
我正在用反流写食物传递应用程序。这似乎并不完全 了解操作应该如何应用于我的应用程序。
我有BasketStore,StatusOverlay(组件)和操作:
set
该应用程序的工作方式如下:
我按下按钮并发送// BasketStore actions
basketSync
basketSync.Completed
basketSync.Invalid
basketSync.Failed
// StatusOverlay actions
statusOverlayOpen
statusOverlayClose
动作。一旦发生,覆盖开始显示,basketSync
将数据请求发送到服务器。
然后根据服务器响应,我点火BasketStore
,basketSync.completed
,basketSync.failed
。当它无效或完成时我关闭叠加,否则我会显示另一个叠加。
问题是我应该如何管理行动?我应该在basketSync.invalid
内听basketSync
打开它并在StatusOverlay
,basketSync.completed
关闭它,否则最好只听basketSync.invalid
,{ {1}}并在statusOverlayOpen
内部的某处触发这些操作。
答案 0 :(得分:3)
简短回答:在标准的Flux架构中,Flux商店应该只发出一个简单的CHANGE事件,所以,不,你不能从商店中激活UI动作。
答案 1 :(得分:2)
我已经看到商店在许多Flux应用程序中触发操作。有些人喜欢将他们的异步工作放在动作创建者中并触发"完成"并且"失败" "子动作"在异步工作的回调中,其他人将异步工作放在存储本身中,在这种情况下从那里触发子操作。正如我所看到的,它们的关键点在于回调中你应该触发一个新动作,而不是直接更新状态,这样数据突变才会发生作为一个效果动作,而不是异步回调。
但话虽如此,组件通常不应该听取任何行动。他们应该只收听商店的更新,并以任何必要的方式反映更新。因此,通过上面提到的几点,商店可以收听"已完成的"或者"失败"行动,并适当更新他们的状态,以反映"已完成的"或者"失败"动作。然后组件呈现任何"错误"基于商店状态的指示,而非直接行动。