【问题标题】:Redux - time travel for side effect such as service connectionRedux - 服务连接等副作用的时间旅行
【发布时间】:2016-06-03 18:09:14
【问题描述】:

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

假设我有PUSHER_CONNECTPUSHER_CONNECTEDPUSHER_DISCONNECTEDPUSHER_LISTEN_TO_CHANNELPUSHER_MESSAGE_RECEIVED 等操作。状态将有一些简单的东西来指示连接状态。

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

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

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

你会如何处理这个问题?

【问题讨论】:

  • 你在说什么时间旅行? Redux 开发工具?它们只会改变应用程序看到的当前状态,但不会影响副作用。为什么要改变副作用?
  • 是的 Redux DevTools。我只是想知道是否有可能有办法恢复来回的副作用,所以它是真正的“时间旅行”。如果我回到我没有连接到 Pusher 的状态,但连接仍然存在,那并不是真正的时间旅行。有这方面的最佳做法吗?

标签: redux redux-thunk


【解决方案1】:

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

在监听器中,检查状态,如果与存储状态相矛盾,执行必要的效果。注意不要在那里陷入无限循环。

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

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 2016-04-14
    • 2016-12-02
    • 1970-01-01
    • 2014-09-22
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    相关资源
    最近更新 更多