Skip to content

Instantly share code, notes, and snippets.

@rickwillcox
Created January 9, 2023 12:57
Show Gist options
  • Save rickwillcox/b4de77024fcbd3d8a20aaaa6ca7ce1e8 to your computer and use it in GitHub Desktop.
Save rickwillcox/b4de77024fcbd3d8a20aaaa6ca7ce1e8 to your computer and use it in GitHub Desktop.
Use this hook when you need to get the size of a React div every time its size changes.
import { useEffect, useRef, useState } from "react";
export interface DivSize {
width: number;
height: number;
}
interface ResponsiveDivSizeReturn {
divRef: React.RefObject<HTMLDivElement>;
divSize: DivSize;
}
export function useResponsiveDivSize(): ResponsiveDivSizeReturn {
const divRef = useRef<HTMLDivElement>(null);
const [divSize, setDivSize] = useState({
width: 0,
height: 0,
});
useEffect(() => {
function handleResize() {
const div = divRef.current!;
if (div) {
setDivSize({
width: div.offsetWidth,
height: div.offsetHeight,
});
}
}
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
return { divRef, divSize };
}
@rickwillcox
Copy link
Author

Example Usage

import { useResponsiveDivSize } from "@src/hooks";

export function ExampleUsage() {
  const { divRef, divSize } = useResponsiveDivSize();

  console.log(divSize);

  return (
    <div ref={divRef}>
      <h1>Example Usage</h1>
    </div>
  );
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment