Redux - 服务连接等副作用的时间旅行

Redux - time travel for side effect such as service connection

我正在使用 redux-thunk 并开始看到一些限制。

假设我有操作 PUSHER_CONNECTPUSHER_CONNECTEDPUSHER_DISCONNECTEDPUSHER_LISTEN_TO_CHANNELPUSHER_MESSAGE_RECEIVED 等。状态会有一些简单的东西表明连接状态。

{ connection: 'connected' } // OR
{ connection: 'disconnected' }

我怎么才能真正在这两个之间来回移动:PUSHER_CONNECTEDPUSHER_DISCONNECTED,因为推送器连接仍然存在于某个地方。我正在考虑将 pusher 对象和相关对象保持在状态中,如果它是 PUSHER_DISCONNECTED,则将它们设置为 null。但是不能保证这些对象是不可变的。

另一个想法是,我会添加对 PUSHER_MESSAGE_RECEIVED 的检查:如果 state.connection !== 'connected' 则不推送新消息...模拟它是 "real" 断开连接。同样,添加对 PUSHER_CONNECT 的检查,如果 pusher 对象存在并已连接,则不要重新连接,只需将状态更改为 {connection: 'connecting'}

你会如何处理这个问题?

您可以订阅商店并管理类似“双向绑定”的内容。

在侦听器中,检查状态,如果与存储状态相矛盾,则执行必要的效果。小心不要陷入死循环。

这是 https://github.com/reactjs/react-router-redux 在时间旅行上同步 URL 柱所采用的方法。