useRafDebounce.js 874 B

12345678910111213141516171819202122232425262728
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = useRafDebounce;
  7. var _react = _interopRequireDefault(require("react"));
  8. var _useEvent = _interopRequireDefault(require("rc-util/lib/hooks/useEvent"));
  9. var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
  10. /**
  11. * Callback will only execute last one for each raf
  12. */
  13. function useRafDebounce(callback) {
  14. const executeRef = _react.default.useRef(false);
  15. const rafRef = _react.default.useRef(null);
  16. const wrapperCallback = (0, _useEvent.default)(callback);
  17. return () => {
  18. if (executeRef.current) {
  19. return;
  20. }
  21. executeRef.current = true;
  22. wrapperCallback();
  23. rafRef.current = (0, _raf.default)(() => {
  24. executeRef.current = false;
  25. });
  26. };
  27. }