Skip to content

Instantly share code, notes, and snippets.

@click2install
Last active August 28, 2021 11:30
Show Gist options
  • Save click2install/37333ba2a2be03674767ef44e0c1aab2 to your computer and use it in GitHub Desktop.
Save click2install/37333ba2a2be03674767ef44e0c1aab2 to your computer and use it in GitHub Desktop.
[useResizeObserver] - A React hook for observing any element resize.
import { RefObject, useEffect, useState } from "react";
import ResizeObserver from "resize-observer-polyfill";
type BoundingRect = Omit<DOMRectReadOnly, "toJSON">;
export function useResizeObserver<T extends HTMLElement>(target: RefObject<T>)
{
const [state, setState] = useState<BoundingRect>({ bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 });
useEffect(() =>
{
if (target.current)
{
const observer = new ResizeObserver(([entry]: ResizeObserverEntry[]) =>
{
setState(entry.contentRect);
});
observer.observe(target.current);
return () => { observer.disconnect(); };
}
}, [target]);
return state;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment