diff --git a/src/hooks/use-measurement/index.ts b/src/hooks/use-measurement/index.ts index 1abf777..c766c23 100644 --- a/src/hooks/use-measurement/index.ts +++ b/src/hooks/use-measurement/index.ts @@ -1,12 +1,12 @@ import { useCallback, useState } from 'react'; -import { ReactRef } from '../../utils/element-refs'; +import { ElementOrRef, resolveElement } from '../../utils/element-refs'; import { useCallbackConst } from '../use-callback-const'; import { useIsomorphicLayoutEffect } from '../use-isomorphic-layout-effect'; import { useResizeObserver } from '../use-resize-observer'; export interface UseMeasurementOptions { - ref: ReactRef; + ref: ElementOrRef; getMeasurement: (el: ElementType) => StateType; defaultValue: StateType | (() => StateType); } @@ -21,8 +21,9 @@ export function useMeasurement const [measurement, setMeasurement] = useState(defaultValue); const onResize = useCallback(() => { - if (ref.current) { - setMeasurement(getMeasurement(ref.current)); + const el = resolveElement(ref); + if (el) { + setMeasurement(getMeasurement(el)); } }, [ref, setMeasurement, getMeasurement]); @@ -35,7 +36,7 @@ export function useMeasurement /** * Given an element `ref`, glean a stateful measurement of the width. */ -export function useElementWidth(ref: ReactRef) { +export function useElementWidth(ref: ElementOrRef) { return useMeasurement({ ref, getMeasurement: useCallbackConst((el) => { @@ -48,7 +49,7 @@ export function useElementWidth(ref: ReactRef) { /** * Given an element `ref`, glean a stateful measurement of the height. */ -export function useElementHeight(ref: ReactRef) { +export function useElementHeight(ref: ElementOrRef) { return useMeasurement({ ref, getMeasurement: useCallbackConst((el) => { diff --git a/src/hooks/use-resize-observer/index.ts b/src/hooks/use-resize-observer/index.ts index 98ffe5f..2662aac 100644 --- a/src/hooks/use-resize-observer/index.ts +++ b/src/hooks/use-resize-observer/index.ts @@ -1,6 +1,6 @@ import { DependencyList, useEffect, useRef } from 'react'; -import { ReactRef } from '../../utils/element-refs'; +import { ElementOrRef, resolveElement } from '../../utils/element-refs'; import { useIsMounted } from '../use-is-mounted'; function hasResizeObserver() { @@ -18,7 +18,7 @@ function hasResizeObserver() { * - Skip the callback intersection callback if component is not mounted */ export function useResizeObserver( - ref: ReactRef, + ref: ElementOrRef, onResize: () => void = () => {}, deps: DependencyList = [], ) { @@ -30,7 +30,7 @@ export function useResizeObserver( }, [onResize]); useEffect(() => { - const element = ref?.current; + const element = resolveElement(ref); if (!element) return; const listener = () => onResizeRef.current();