我的架构基于 @manggit 的中性文章part 1和part 2。 Redux的传统同步数据流为Action -> Reducer -> Container -> Component
,并且在进行数据库操作时调度异步操作。但是,关键的区别是我有一个“轮询”后台任务,该任务打包数据并每X秒发出一次API请求。这个Poller根本没有连接到Redux,也没有直接与UI交互。但是,它确实会与数据库进行交互,并且会更新Realm中确实影响UI状态的其他对象。
例如:
UI组件调度'SAVE_CHAT_MESSAGE'
操作。通过一次重击,聊天消息被写入数据库,结果被传递到reducer。
轮询器将在下次数据库定期检查时接收此新消息,并将其打包以发送到后端。打包的消息将另存为单独的对象,准备发送。
一旦轮询器发送了打包的消息并收到API响应,我便想更新数据库中原始聊天消息对象的状态并更新Redux存储以反映网络状态。
当前,由于Poller未连接到Redux存储并且不调度动作,因此无法更新状态。
我还应该注意,由于应用程序是多用户的,因此我避免将整个数据库放入Redux存储或使用Reduxpersist。
我认为最好的解决方案是允许Poller从Redux状态读取而不是仅从数据库读取,从而将Poller纳入Redux的范围。以 @manggit 的示例为基础:
Diagram illustrating the "Poller"s placement within the Redux scope
轮询器现在可以访问Redux状态,并将保持其状态,以从Redux状态读取聊天消息状态。它还会打包它的API消息,并将它们存储在数据库和Redux状态中。
我没有包括代码示例,因为我的问题比实现更具有概念性,并且很多问题都适合于样板代码。