Open1

React の setInterval と useState を組み合わせる方法

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

結論

Functional update を使う方法もあるが、結局この方法が一番万能な気がする。

import { useState, useEffect, useRef, useCallback } from 'react';

export function App(props) {
  const [count, setCount] = useState(0);

  const callback = useCallback(() => {
    setCount(count + 1);
  }, [count]);

  const callbackRef = useRef(callback);

  useEffect(() => {
    callbackRef.current = callback;
  }, [count]);

  useEffect(() => {
    const timerId = setInterval(() => {
      callbackRef.current();
    }, 1000);

    return () => clearInterval(timerId);
  }, []);

  return (
    <dl>
      <dt>Count</dt>
      <dd>{count}</dd>
    </dl>
  );
}

https://zenn.dev/kakaka/articles/41f22d2dcc9720

素晴らしい記事をありがとう。