Skip to content
Snippets Groups Projects
useStableCallback.ts 480 B
Newer Older
  • Learn to ignore specific revisions
  • import { useRef, useLayoutEffect, useCallback } from 'react';
    
    type UseStableCallbackArg = (...args: unknown[]) => unknown;
    
    
    export function useStableCallback(callback: UseStableCallbackArg) {
    
      const callbackRef = useRef<UseStableCallbackArg>();
      const memoCallback = useCallback(
        (...args) => callbackRef.current && callbackRef.current(...args),
        [],
      );
      useLayoutEffect(() => {
        callbackRef.current = callback;
      });
      return memoCallback;
    }