useInterval.ts 577 B

12345678910111213141516171819202122232425
  1. import React from 'react';
  2. type Callback = () => void;
  3. const useInterval = (callback: Callback, delay: number) => {
  4. const savedCallback = React.useRef<Callback>();
  5. React.useEffect(() => {
  6. savedCallback.current = callback;
  7. }, [callback]);
  8. // eslint-disable-next-line consistent-return
  9. React.useEffect(() => {
  10. const tick = () => {
  11. if (savedCallback.current) savedCallback.current();
  12. };
  13. if (delay !== null) {
  14. const id = setInterval(tick, delay);
  15. return () => clearInterval(id);
  16. }
  17. }, [delay]);
  18. };
  19. export default useInterval;