/** * External dependencies */ // eslint-disable-next-line no-restricted-imports import type { RefObject } from 'react'; /** * GeChiUI dependencies */ import { useRef } from '@gechiui/element'; import { useIsomorphicLayoutEffect } from '@gechiui/compose'; /** * Creates a reference for a prop. This is useful for preserving dependency * memoization for hooks like useCallback. * * @see https://codesandbox.io/s/uselatestref-mlj3i?file=/src/App.tsx * * @param value The value to reference * @return The prop reference. */ export function useLatestRef< T >( value: T ): RefObject< T > { const ref = useRef( value ); useIsomorphicLayoutEffect( () => { ref.current = value; } ); return ref; }