Table of contents
Open Table of contents
为什么要把 setInterval 声明化
- 将命令式 API 封装为声明式 Hook,代码更简洁、意图更清晰。
- 更贴合 React 的渲染与状态模型:渲染描述某一时刻的 UI,计时器作为副作用由 Hook 管理。
症结(为什么直接用 setInterval 会“怪”)
- 陈旧闭包(stale closure):回调捕获初始的 state/props,后续 tick 里读到的常是旧值,产生逻辑错误。
适用场景
- 轮询(可动态降频/提频)、节拍器、动画步进、后台标签降低刷新频率等。
一句话总结
- 用 useRef + 分离的 useEffect,把“调度”(interval)与“业务回调”解耦,使 setInterval 的使用方式与 React 的声明式数据流保持一致。