Dashboard sipadu mbip
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

useRafInterval.js 985B

1234567891011121314151617181920212223242526272829303132333435363738
  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;