useRafLock.js 888 B

1234567891011121314151617181920212223242526272829
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = useRafLock;
  8. var React = _interopRequireWildcard(require("react"));
  9. var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
  10. function useRafLock() {
  11. const [state, setState] = React.useState(false);
  12. const rafRef = React.useRef(null);
  13. const cleanup = () => {
  14. _raf.default.cancel(rafRef.current);
  15. };
  16. const setDelayState = nextState => {
  17. cleanup();
  18. if (nextState) {
  19. setState(nextState);
  20. } else {
  21. rafRef.current = (0, _raf.default)(() => {
  22. setState(nextState);
  23. });
  24. }
  25. };
  26. React.useEffect(() => cleanup, []);
  27. return [state, setDelayState];
  28. }