Skip to content

Instantly share code, notes, and snippets.

@its-jman
Created January 27, 2021 23:29
Show Gist options
  • Save its-jman/0daf7bf38e7fb1b10586033ae6cb8221 to your computer and use it in GitHub Desktop.
Save its-jman/0daf7bf38e7fb1b10586033ae6cb8221 to your computer and use it in GitHub Desktop.
useResizeObserver.js
import { useEffect } from "react";
let nodeList = new Map();
let observer = new window.ResizeObserver((entries) => {
for (const entry of entries) {
if (nodeList.has(entry.target)) {
nodeList.get(entry.target)(entry);
}
}
});
export default function useResizeObserver(node, cb) {
useEffect(() => {
if (node && cb) {
if (nodeList.has(node)) {
console.warn("Warning: ResizeObserver is already observing node...");
console.warn(node);
} else {
observer.observe(node);
nodeList.set(node, cb);
}
}
return function() {
if (node) nodeList.delete(node);
if (node && observer) observer.unobserve(node);
};
}, [node]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment