Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

38 строки
985 B

  1. import { useEffect } from 'react';
  2. import useCommittedRef from './useCommittedRef';
  3. function useRafInterval(fn, ms, paused) {
  4. if (paused === void 0) {
  5. paused = false;
  6. }
  7. var handle;
  8. var start = new Date().getTime();
  9. var fnRef = useCommittedRef(fn); // this ref is necessary b/c useEffect will sometimes miss a paused toggle
  10. // orphaning a setTimeout chain in the aether, so relying on it's refresh logic is not reliable.
  11. var pausedRef = useCommittedRef(paused);
  12. function loop() {
  13. var current = new Date().getTime();
  14. var delta = current - start;
  15. if (pausedRef.current) return;
  16. if (delta >= ms && fnRef.current) {
  17. fnRef.current();
  18. start = new Date().getTime();
  19. }
  20. cancelAnimationFrame(handle);
  21. handle = requestAnimationFrame(loop);
  22. }
  23. useEffect(function () {
  24. handle = requestAnimationFrame(loop);
  25. return function () {
  26. return cancelAnimationFrame(handle);
  27. };
  28. }, []);
  29. }
  30. export default useRafInterval;