KooKs

useInterval

지정한 간격으로 콜백 함수를 실행하는 커스텀 훅
ReactTypescript

예시

0
1초마다 카운트가 증가합니다.

API

useInterval()
  • Parameters
    • callback (Function)실행할 콜백 함수
    • delay (number | null)콜백 실행 간격(ms). null이면 인터벌이 중지됩니다.
  • Returns
    • void (void)이 훅은 값을 반환하지 않습니다.

개발 및 사용환경

ReactTypescript

사용법

1// 기본 사용
2useInterval(() => {
3  console.log("1초마다 실행");
4}, 1000);
5
6// 조건부 실행
7const [isRunning, setIsRunning] = useState(true);
8useInterval(() => {
9  console.log("실행 중...");
10}, isRunning ? 1000 : null);
11
12// 컴포넌트 언마운트 시 자동 정리
13useInterval(() => {
14  // 정리 함수가 자동으로 호출됨
15}, 1000);

Hook

1import { useEffect, useRef } from "react";
2
3/**
4 * 지정한 간격으로 콜백 함수를 실행하는 Hook
5 *
6 * @param callback - 실행할 콜백 함수
7 * @param delay - 콜백 실행 간격(ms)
8 *   - null: 인터벌 중지
9 *   - 0 이하: 인터벌 중지 (경고 메시지 출력)
10 *   - 양수: 지정된 간격으로 실행
11 */
12export function useInterval(callback: () => void, delay: number | null) {
13  const savedCallback = useRef(callback);
14
15  useEffect(() => {
16    savedCallback.current = callback;
17  }, [callback]);
18
19  useEffect(() => {
20    if (delay === null) return;
21
22    if (delay <= 0) {
23      console.warn("useInterval: delay must be a positive number");
24      return;
25    }
26
27    const id = setInterval(() => savedCallback.current(), delay);
28    return () => clearInterval(id);
29  }, [delay]);
30}