useInterval.ts 570 B

123456789101112131415161718192021222324252627282930
  1. import React from 'react';
  2. type Callback = () => any;
  3. const useInterval = (callback: Callback, delay: number) => {
  4. const savedCallback = React.useRef<Callback>();
  5. React.useEffect(
  6. () => {
  7. savedCallback.current = callback;
  8. },
  9. [callback],
  10. );
  11. React.useEffect(
  12. () => {
  13. const tick = () => {
  14. savedCallback.current && savedCallback.current()
  15. };
  16. if (delay !== null) {
  17. const id = setInterval(tick, delay);
  18. return () => clearInterval(id);
  19. }
  20. },
  21. [delay],
  22. );
  23. }
  24. export default useInterval;