Skip to content

Instantly share code, notes, and snippets.

@HaNdTriX
Created November 26, 2019 10:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HaNdTriX/287e9b94b9a765ab78957997952a00dc to your computer and use it in GitHub Desktop.
Save HaNdTriX/287e9b94b9a765ab78957997952a00dc to your computer and use it in GitHub Desktop.
import { useState, useEffect, RefObject } from "react";
import ResizeObserver from "resize-observer-polyfill";
const useElementResize = (ref: RefObject<HTMLElement>) => {
const [rect, setRect] = useState({});
useEffect(() => {
if (!ref.current) return
const ro = new ResizeObserver((entries, observer) => {
for (const entry of entries) {
if (entry.target === ref.current) {
// update state if this is our DOM Node
// (we may support multiple refs)
setRect(entry.contentRect);
}
}
});
// observe the passed in ref
ro.observe(ref.current);
return () => {
// cleanup
ro.disconnect();
};
}, [ref]);
return rect;
};
export default useElementResize;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment