useInterval
計時器。你可以通過傳遞 controls 參數來手動控制計時器。
useInterval 提供了一個宣告式的 setInterval 封裝。它接受一個回呼函式和間隔時間(毫秒),回傳可暫停和恢復計時器的控制項。當間隔時間變更時計時器會自動重置,卸載時自動清理。
使用場景
- 建構倒數計時器、時鐘或定期輪詢機制
- 定期更新 UI 元素(例如即時時間顯示、動畫幀)
- 實作可暫停和恢復的定時任務
注意事項
- SSR 安全:在伺服器端渲染時為空操作。伺服器上不會設定計時器。
- 動態間隔:間隔時間可以在渲染之間變更,計時器會自動重置。傳入
null可暫停計時器。 - 相關 hooks:另請參閱
useTimeout和useTimeoutFn用於一次性延遲,以及useRafFn用於基於requestAnimationFrame的迴圈。
Usage
Live Editor
function Demo() { const [count, setCount] = useState(0); useInterval(() => { setCount(count + 1); }, 1000); return <div>計數:{count}</div>; };
Result
API
useInterval
Returns
Pausable
Arguments
| 參數名 | 描述 | 類型 | 預設值 |
|---|---|---|---|
| callback | 回调 | () => void (必填) | - |
| delay | 时间,如果为 null 的话则停止计时器 | number | null | undefined | - |
| options | 可选参数 | UseIntervalOptions | undefined | - |
UseIntervalOptions
| 參數名 | 描述 | 類型 | 預設值 |
|---|---|---|---|
| immediate | 是否立即执行。 | boolean | - |
| controls | 是否控制执行。 | boolean | - |
Pausable
| 參數名 | 描述 | 類型 | 預設值 |
|---|---|---|---|
| isActive | 一个 ref,指示一个 pausable 实例是否处于激活状态 | RefObject<boolean> (必填) | - |
| pause | 暂时暂停执行效果 | () => void (必填) | - |
| resume | 恢复效果 | () => void (必填) | - |