【发布时间】:2015-03-31 05:13:20
【问题描述】:
我正在使用 MartyJS 构建一个 Flux 应用程序(它非常接近“香草”Flux 并使用相同的底层调度程序)。它包含具有固有依赖关系的商店。例如,UserStore 跟踪当前用户,InstanceStore 跟踪当前用户拥有的数据实例。实例数据是从 API 异步获取的。
问题是当用户更改时,InstanceStore 的状态如何处理。
我开始相信(例如阅读@fisherwebdev 在 SO 上的答案),在动作创建函数中发出 AJAX 请求是最合适的,并且让 AJAX “成功”导致动作反过来导致存储改变。
因此,为了获取用户(即登录),我在动作创建器函数中进行了 AJAX 调用,当它解析时,我将用户作为有效负载发送 RECEIVE_USER 动作。 UserStore 监听并相应地更新其状态。
但是,如果用户更改,我还需要重新获取InstanceStore 中的所有数据。
选项1:我可以在InstanceStore中监听RECEIVE_USER,如果是新用户,触发AJAX请求,进而创建另一个动作,进而导致InstanceStore 进行更新。这样做的问题是它感觉像是级联动作,虽然从技术上讲它是异步的,所以调度程序可能会允许它。
选项 2:另一种方法是让 InstanceStore 监听 UserStore 发出的更改事件,然后进行请求-动作舞蹈,但这也感觉不对。
选项 3:第三种方法是让动作创建者协调两个 AJAX 调用并分别调度这两个动作。但是,现在动作创建者必须非常了解商店之间的关系。
Where should ajax request be made in Flux app? 中的一个答案让我认为选项 1 是正确的,但 Flux 文档也暗示存储触发操作不好。
【问题讨论】:
标签: ajax reactjs-flux