Use Dimensions

PreviousNext

A hook component.

Docs
fancyhook

Preview

Loading preview…
hooks/use-dimensions.ts
import { RefObject, useEffect, useState } from "react"

interface Dimensions {
  width: number
  height: number
}

export function useDimensions(
  ref: RefObject<HTMLElement | SVGElement | null>
): Dimensions {
  const [dimensions, setDimensions] = useState<Dimensions>({
    width: 0,
    height: 0,
  })

  useEffect(() => {
    const updateDimensions = () => {
      if (ref.current) {
        const { width, height } = ref.current.getBoundingClientRect()
        setDimensions({ width, height })
      }
    }

    updateDimensions()
    window.addEventListener("resize", updateDimensions)

    return () => window.removeEventListener("resize", updateDimensions)
  }, [ref])

  return dimensions
}

Installation

npx shadcn@latest add @fancy/use-dimensions

Usage

import { UseDimensions } from "@/hooks/use-dimensions"
const value = UseDimensions()