【问题标题】:How to revert side-effects when disabling an action in Redux logger?在 Redux 记录器中禁用操作时如何恢复副作用?
【发布时间】:2016-02-21 05:48:03
【问题描述】:

假设动作创建者(或中间件)具有启动服务的副作用:service.start()

redux-devtools 的禁用操作功能可恢复由于该特定操作而导致的状态更改。我们如何确保副作用也被恢复,在上面的例子中意味着调用service.stop()?我猜需要的是状态的观察者,但我不确定这是否是 Flux/redux 的实现方式。

【问题讨论】:

标签: reactjs flux redux side-effects redux-devtools


【解决方案1】:

你不能这样做。在 Redux 中无法恢复副作用(例如,如何“撤消”GET 请求?)。

最终副作用不应影响应用程序,除非它们最终产生操作。 (例如,一个 GET 请求最终会产生一个带有响应的动作。)当有动作时,它们可以被还原。

因此,您无法恢复副作用,但无论如何这都无关紧要。您可以还原作为结果分派的操作,只有操作可以更改应用程序的状态。

【讨论】:

  • 确实,如果应用程序状态是完整的并且只有动作(不是副作用)改变状态,则不需要恢复副作用。我唯一的问题是,在使用记录器时,存储状态可能与“实际”状态不同步。例如,操作登录用户并成功保存 cookie 会话。使用记录器禁用该操作将正确更新存储状态(用户已注销),但 cookie 仍然存在。
  • 通常您不会使用与react-devtools 相同的逻辑,而是调用注销 (=== revertLogin) 函数。查看 react-devtools 代码,也许可以编写一个响应 { TOGGLE_ACTION, ROLLBACK, ... } 操作并根据需要处理恢复副作用的中间件。
  • 是的(虽然这有点脆弱,因为它们是 DevTools 内部的并且会在版本之间中断)。
  • 这听起来还是可行的。您可以将这个applyMiddleware 调用单独 DevTools 增强器之后放在compose 链中。
猜你喜欢
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 2018-05-29
  • 2018-03-14
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
相关资源
最近更新 更多