调度顺序应如下所示:
;; Initial Data
(dispatch [:http/get-bar])
;; We click something to update foo
(dispatch [:http/update-foo])
;; :success handler gets run:
(dispatch [:http-success/update-foo])
;; Foo data influences bar data, we want to get-bar again after foo updates
(dispatch [:http/get-bar])
如果我们有这样的事情:
{:on-click
(fn []
(dispatch [:http/update-foo])
(dispatch [:http/get-bar]))}
订单实际上看起来像:
[[:http/get-bar]
[:http/update-foo]
[:http/get-bar]
[:http-success/update-foo]]
我们无法保证在再次获得 bar 之前更新成功。:http/get-bar
可以作为 的一部分进行调度:http-success/update-foo
,但是硬编码会使事情变得不那么灵活。在我的特定用例中,我有一个在两个不同页面上使用的模态组件。单击保存时,两者都会发送到,[:http/update-foo]
但一个页面会跟进,
[:http/get-bar]
另一个页面会跟进[:http/get-baz]
,两者都需要foo
先完成更新。