Created
January 9, 2023 12:57
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Example Usage