Middleware 与副作用
middleware 观察 action 流做日志、权限或副作用;不要隐藏业务状态变更。练习:失败 action 记录 trace id。
边界、失败与取舍
- 生命周期:确认订阅、监听器、请求或 worker 在重渲染、路由离开和热更新时是否重复创建。
- 数据边界:可序列化数据、函数、DOM 对象、类实例和错误对象的处理方式不同;跨线程、SSR 或持久化前先转换。
- 并发边界:多个输入同时到达时,明确覆盖、排队、合并还是丢弃;为过期响应保留请求标识。
- 可观测性:记录输入、状态转移、耗时和失败原因,避免只看最终 UI 猜测机制。
可运行实验
- 用 Redux DevTools 记录一次 action 到 state 的完整路径。
- 故意把 Promise、DOM 节点或 class 实例放进 state,解释 serializableCheck 的提示。
- 为异步请求分别设计 loading、success、failure 和取消时的状态转移。
实验记录至少包含:环境版本、输入序列、预期结果、实际结果、失败截图或日志,以及修复后再次运行的结果。
练习
- 用自己的话画出本篇概念的依赖图,并标出一个可能产生重复执行或竞态的节点。
- 写一个最小测试覆盖成功、失败、取消/卸载三条路径;测试应断言可观察结果,而不是内部实现调用次数。
- 给出一个选择当前方案而不是替代方案的理由,并写下替代方案何时更合适。
下一步
完成练习后阅读本章答案。