この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - React コーディング問題
2. useTimeout()

import { useEffect, useRef } from 'react';

const useTimeout = (callback, delay) => {
  const savedCallback = useRef(callback);
  const timeoutId = useRef(null);

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

  useEffect(() => {
    if (timeoutId.current) {
      clearTimeout(timeoutId.current);
    }

    timeoutId.current = setTimeout(() => savedCallback.current(), delay);

    return () => {
      clearTimeout(timeoutId.current);
    };
  }, [delay]);

  return timeoutId.current;
};

export default useTimeout;

Usage:

import React from 'react';
import useTimeout from './useTimeout';

const MyComponent = () => {
  const [count, setCount] = React.useState(0);

  useTimeout(() => {
    setCount(count + 1);
  }, 5000);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
};