packagesreacthooksuseResizeObserver

useResizeObserver

Resize Observer API를 사용하여 요소의 크기 변화를 관찰하는 Hook입니다. 반응형 레이아웃, 동적 크기 조정이 필요한 컴포넌트에 유용합니다.

Props

이름타입설명기본값
onResize(entry: ResizeObserverEntry) => void크기 변경 시 호출되는 콜백 함수-

Return

  • containerRef: 크기 변화를 관찰할 요소에 연결할 ref 객체

Usage

import { useResizeObserver } from '@teamsparta/react';
 
function Example() {
  const containerRef = useResizeObserver({
    onResize: (entry) => {
      console.log('너비:', entry.contentRect.width);
      console.log('높이:', entry.contentRect.height);
    },
  });
 
  return <div ref={containerRef}>크기가 변하는 요소</div>;
}

Example

반응형 그리드

function ResponsiveGrid() {
  const [columns, setColumns] = useState(3);
 
  const containerRef = useResizeObserver({
    onResize: (entry) => {
      const width = entry.contentRect.width;
      if (width < 600) setColumns(1);
      else if (width < 900) setColumns(2);
      else setColumns(3);
    },
  });
 
  return (
    <div
      ref={containerRef}
      style={{
        display: 'grid',
        gridTemplateColumns: `repeat(${columns}, 1fr)`,
      }}
    >
      {items.map((item) => (
        <div key={item.id}>{item.content}</div>
      ))}
    </div>
  );
}

동적 차트 크기

function ResizableChart() {
  const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
 
  const chartRef = useResizeObserver({
    onResize: (entry) => {
      setDimensions({
        width: entry.contentRect.width,
        height: entry.contentRect.height,
      });
    },
  });
 
  return (
    <div ref={chartRef} style={{ width: '100%', height: '100%' }}>
      <Chart
        width={dimensions.width}
        height={dimensions.height}
        data={chartData}
      />
    </div>
  );
}