Newer
Older
// @ts-strict-ignore
Matiss Janis Aboltins
committed
import { useRef, useLayoutEffect, useCallback } from 'react';
type UseStableCallbackArg = (...args: unknown[]) => unknown;
Joel Jeremy Marquez
committed
export function useStableCallback(callback: UseStableCallbackArg) {
Matiss Janis Aboltins
committed
const callbackRef = useRef<UseStableCallbackArg>();
const memoCallback = useCallback(
(...args) => callbackRef.current && callbackRef.current(...args),
[],
);
useLayoutEffect(() => {
callbackRef.current = callback;
});
return memoCallback;
}