时间旅行调试
基于 Redux DevTools 扩展 + Redux Toolkit 2.x 编写
速查
- jump:点 action 列表任意 action,跳转到那一刻的 state
- skip:跳过(取消)某个 action,看「没有它会怎样」
- slider:拖时间线滑块连续回放状态变化
- reorder:在历史里重排 action
- replay:回放整个 action 序列
- 前提:纯函数 reducer + 可序列化 state
时间旅行(time-travel)是 Redux DevTools 最标志性的能力,也是「可预测状态容器」的最大价值体现。
为什么能时间旅行
Redux 的设计是 单向数据流 + 纯函数 reducer:
- 每个状态变更都由一个 action 触发
- reducer 是纯函数:
(state, action) => newState,相同输入必得相同输出 - 因此从初始 state + 一串 action,可确定性地重建任意时刻的 state
时间旅行不是「魔法」,而是纯函数可重放的自然结果——这也解释了为什么副作用要放在 reducer 之外。
jump:跳转到任意状态
点击 action 列表中任意一条 action,应用的 state 立即回到那一刻,页面 UI 同步还原。可在历史间自由前后跳,复现「状态是怎么一步步变成现在这样」。
skip:跳过某个 action
把某个 action 标记为 skip(取消),Redux DevTools 重新计算「没有这个 action」时的 state 序列——用于验证某个 action 的真实影响、定位是哪个 action 引入了问题。
slider:连续回放
时间线滑块可连续拖动,像视频进度条一样回放整个状态变化过程,直观看到 state 随 action 演进。
reorder 与 replay
- reorder:调整 action 在历史中的顺序,观察对最终 state 的影响
- replay:从头回放整个 action 序列
时间旅行的前提
要让时间旅行可靠工作:
- reducer 必须是纯函数:无副作用、不可变更新
- state 应可序列化:避免在 state 里放函数、类实例等不可序列化值
- 副作用(API 调用等)放在 reducer 之外(thunk / saga / listener)
这些约束正是 Redux「可预测」的代价与收益——遵守它们,才能享受时间旅行。
下一步
action 与 state 的检查见 Action 与状态检查。