import { useCallback, useEffect, useRef, useState } from 'react';
export type Maybe<V> = V | null;
export type UseStateCallbackResult<V> = [V, (newState: V, cb: (value: V) => void) => void];
export function useStateCallback<V>(initialState: V): UseStateCallbackResult<V> {
const [state, setState] = useState<V>(initialState);
const cbRef = useRef<Maybe<(value: V) => void>>(null);
const setStateCallback = useCallback((newState, cb: (value: V) => void) => {
cbRef.current = cb;
setState(newState);
}, []);
useEffect(() => {
if (cbRef.current) {
cbRef.current?.(state);
cbRef.current = null;
}
}, [state]);
return [state, setStateCallback];
}