useRafDebounce.js 549 B

123456789101112131415161718192021
  1. import React from 'react';
  2. import useEvent from "rc-util/es/hooks/useEvent";
  3. import raf from "rc-util/es/raf";
  4. /**
  5. * Callback will only execute last one for each raf
  6. */
  7. export default function useRafDebounce(callback) {
  8. const executeRef = React.useRef(false);
  9. const rafRef = React.useRef(null);
  10. const wrapperCallback = useEvent(callback);
  11. return () => {
  12. if (executeRef.current) {
  13. return;
  14. }
  15. executeRef.current = true;
  16. wrapperCallback();
  17. rafRef.current = raf(() => {
  18. executeRef.current = false;
  19. });
  20. };
  21. }