🚀

(JS/TS) setIntervalを使ってカウントダウン機能を作ろう

に公開

カウントダウンを実現するために setInterval を使ってみました。
調べてみるとさまざまな方法がありましたが、自分にはこのやり方が一番シンプルに感じたので、まとめておきます。

setInterval

指定した間隔で、同じ処理を繰り返し実行する関数です。

基本構文

setInterval(() => {
  // 処理内容
}, 時間); // 単位はミリ秒(1000 = 1秒)

例:60秒カウントダウン

設定時間(60秒)を1秒ごとに「-1」減らす➡️残り時間が1秒以下になると、0に固定
初期秒数(initialSeconds)は、カスタムフックの引数として受け取るようにしています。


const initialSeconds = 60;
const [timeLeft, setTimeLeft] = useState(initialSeconds); // カウントダウンの初期値

useEffect(() => {
  if (timeLeft <= 0) return; // タイマーが0以下なら何もしない

  const timer = setInterval(() => {
    setTimeLeft(prev => {
      if (prev <= 1) {
        clearInterval(timer); // タイマー停止
        return 0; // 残り0秒で固定
      }
      return prev - 1; // 残り秒数を1減らす
    });
  }, 1000); // 1000ミリ秒(1秒)ごとに実行

  return () => clearInterval(timer); // コンポーネントのクリーンアップ時にタイマー解除
}, [timeLeft]); // timeLeftが更新されるたびに再実行

リセット機能

初期状態に戻すためのリセット関数も用意しました。

const reset = useCallback(() => {
  setTimeLeft(initialSeconds);
}, [initialSeconds]); // 初期秒数が変わった場合にも対応

Discussion