@gechiui/components
Version:
UI components for GeChiUI.
31 lines (26 loc) • 712 B
text/typescript
/**
* 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;
}