【发布时间】:2016-09-24 08:17:53
【问题描述】:
在我跟踪乐器练习的 React Native 应用中,我有三个商店:
- 会话存储
- 目标商店
- 乐器商店
每个商店管理一个模型(会话、目标、仪器)并通过 REST api 获取/更新服务器。
SessionStore 监听有关 Session 的操作(显然):session.add、session.update。但它也会监听其他存储的更改,以便能够在目标或仪器更改名称时更新会话。
相应地,InstrumentStore 会侦听 Instrument 操作,但也会侦听 Session 操作以更新有关有多少会话使用特定工具的统计信息。
为了能够不存在竞争条件,InstrumentStore 将对 action session.add 进行操作,但首先等待 SessionStore 处理该操作(以确保 Session 已在 API 中更新)。为此,我使用 dispatcher.waitFor 和 SessionStore dispatchToken 作为信号量。
问题:由于所有商店都使用彼此的 dispatchToken,它们都必须相互导入。这是对模块的循环依赖,会导致奇怪的竞争条件。有时,其中一家商店在被其他商店之一包含时尚未构建。
这是我的商店:https://github.com/osirisguitar/GuitarJournalApp/tree/feature/flat-ui/js/stores
我是否以错误的方式使用通量模式?
加法
这就是我想要发生的事情(按顺序):
会话已更新:
- 将更新后的会话发送到 API
- 刷新 SessionStore
- 刷新目标商店
- 刷新 InstrumentStore
2、3 和 4 需要等待 1 完成,这就是为什么 GoalStore 和 InstrumentStore 需要 SessionStore 调度令牌。
目标是更新:
- 将更新后的目标发送到 API
- 刷新目标商店
- 刷新 SessionStore
2和3需要等待1,所以SessionStore需要引入循环依赖的GoalStore dispatchToken。
【问题讨论】:
标签: react-native flux reactjs-flux