useRafLock.js 528 B

123456789101112131415161718192021
  1. import * as React from 'react';
  2. import raf from "rc-util/es/raf";
  3. export default function useRafLock() {
  4. const [state, setState] = React.useState(false);
  5. const rafRef = React.useRef(null);
  6. const cleanup = () => {
  7. raf.cancel(rafRef.current);
  8. };
  9. const setDelayState = nextState => {
  10. cleanup();
  11. if (nextState) {
  12. setState(nextState);
  13. } else {
  14. rafRef.current = raf(() => {
  15. setState(nextState);
  16. });
  17. }
  18. };
  19. React.useEffect(() => cleanup, []);
  20. return [state, setDelayState];
  21. }