如何观察组件当前的数据与层级?
- Components 面板: 检查组件树、props、state 与 Hook 值,定位哪个组件实际拥有数据;
- 安装方式: Web 使用浏览器扩展,其他运行环境使用其支持的 DevTools 集成;生产与开发环境可观察能力不同;
- 调试修改: 临时修改工具中的值可帮助验证 UI 分支,但不会自动修改源代码或建立永久业务状态;
如何记录一次交互的组件渲染?
- Profiler 面板: 开始录制、执行单个可复现交互、停止,再检查提交与耗时分布;
- 分析顺序: 先找昂贵提交,再缩小到组件,检查是父级更新、props 变化、Context 还是本地状态造成;
- 测量边界: 程序化 Profiler 指标见 Profiler 笔记,避免把开发环境额外检查当作生产开销;
- 时间关联: 在同一时间轴观察 React 调度、组件渲染、提交与浏览器网络、脚本、布局和绘制;
- Scheduler 轨道: 帮助区分紧急、Transition、Suspense 与空闲工作,解释某次更新为什么等待或重做;
- Components 轨道: 在支持的开发或 profiling 构建中展开组件工作,与实际 React 层级对应;
- 服务端轨道: 支持的框架和运行环境还可关联服务端工作,不能假定所有项目与浏览器都提供同样细节;
怎样查找由 Effect 造成的连续更新?
- 级联信号: 一次提交之后立即触发新的更新,可能来自 Effect 设置可派生 state 或相互同步的循环;
- 定位过程: 关联时间线中的调用位置与组件,检查能否将计算移回渲染或事件,避免只用 memo 掩盖级联;
- 复测场景: 相同数据、相同交互、相同构建下比较用户可见延迟,避免以一次偶然数字作结论;
多种调试工具如何配合?
- ESLint: 在编辑与构建检查静态规则;
- StrictMode: 在开发运行中检查纯度与清理;
- DevTools: 观察实际数据和性能,帮助解释哪里出问题,而不是自动替代规则与业务测试;