useRAF.tsx 368 B

123456789101112
  1. import {useEffect} from 'react';
  2. export default function useRAF(callback: () => unknown, opts?: {enabled: boolean}) {
  3. const {enabled = true} = opts ?? {};
  4. useEffect(() => {
  5. if (enabled) {
  6. const timer = window.requestAnimationFrame(callback);
  7. return () => window.cancelAnimationFrame(timer);
  8. }
  9. return () => {};
  10. }, [callback, enabled]);
  11. }