diff --git a/src/index.ts b/src/index.ts index d908440..0374e5d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -21,13 +21,13 @@ function useResizeObserver(opts?: { // Type definition when the hook just passes through the user provided ref. function useResizeObserver(opts?: { - ref: RefObject; + ref: RefObject | null; onResize?: ResizeHandler; }): { ref: RefObject } & ObservedSize; function useResizeObserver( opts: { - ref?: RefObject; + ref?: RefObject | null; onResize?: ResizeHandler; } = {} ): { ref: RefObject } & ObservedSize { @@ -69,7 +69,7 @@ function useResizeObserver( }); useEffect(() => { - if (resizeObserverRef.current) { + if (!(ref?.current instanceof Element) || resizeObserverRef.current) { return; } @@ -103,14 +103,10 @@ function useResizeObserver( } } }); - }, []); + }); useEffect(() => { - if ( - typeof ref !== "object" || - ref === null || - !(ref.current instanceof Element) - ) { + if (!(ref?.current instanceof Element)) { return; } diff --git a/tests/basic.tsx b/tests/basic.tsx index fee11ba..e2fd4a4 100644 --- a/tests/basic.tsx +++ b/tests/basic.tsx @@ -145,6 +145,36 @@ describe("Vanilla tests", () => { handler.assertSize({ width: 100, height: 200 }); }); + it("should not initialize a ResizeObserver if no ref is passed", async () => { + spyOn(window, "ResizeObserver"); + const Test: FunctionComponent = ({ + resolveHandler, + }) => { + const { width, height } = useResizeObserver({ ref: null }); + const currentSizeRef = useRef<{ + width: number | undefined; + height: number | undefined; + }>({ width: undefined, height: undefined }); + currentSizeRef.current.height = height; + currentSizeRef.current.width = width; + + useEffect(() => { + resolveHandler(createComponentHandler({ currentSizeRef })); + }, []); + + return ( +
+ {width}x{height} +
+ ); + }; + + await render(Test); + + await delay(50); + expect(window.ResizeObserver).not.toHaveBeenCalled(); + }); + it("should be able to reuse the same ref to measure different elements", async () => { let switchRefs = (): void => { throw new Error(`"switchRefs" should've been implemented by now.`);