useMeasure
使用 Resize Observer API 跟蹤 HTML 元素的尺寸
useMeasure 測量 DOM 元素的 content-box 尺寸,使用 ResizeObserver。它回傳一個 ref(綁定到目標元素)和一個包含 width、height 以及位置資訊的測量物件。尺寸在元素調整大小時自動更新。
使用場景
- 測量元素尺寸以進行動態佈局計算
- 建構根據內容大小自動調整的容器或包裝器
- 為 canvas 或 SVG 元素獲取精確的渲染尺寸
注意事項
- SSR 安全:在伺服器端渲染時所有測量值回傳
0。伺服器上不會建立ResizeObserver。 - Content-box:測量的是 content-box 尺寸。如需 border-box 測量,請使用
useElementSize搭配box: "border-box"選項。 - 相關 hooks:另請參閱
useElementSize用於帶有盒模型選項的尺寸追蹤,useElementBounding獲取完整的邊界資訊,以及useResizeObserver用於低階存取。
Usage
Live Editor
function Demo() { const ref = useRef<HTMLTextAreaElement>(null); const [rect, stop] = useMeasure(ref); return ( <div> <div>Resize the box to see changes</div> <div> <button onClick={() => stop()}>stop observe</button> </div> <br /> <textarea ref={ref} disabled style={{ width: 286, height: 166 }} value={JSON.stringify(rect, null, 2)} /> </div> ); };
Result
API
useMeasure
Returns
readonly [UseMeasureRect, () => void]: [DOMRect值,停止監聽函數]
Arguments
| 參數名 | 描述 | 類型 | 預設值 |
|---|---|---|---|
| target | dom对象 | BasicTarget<Element> (必填) | - |
| options | 可选参数 | ResizeObserverOptions | undefined | - |
UseMeasureRect
| 參數名 | 描述 | 類型 | 預設值 |
|---|---|---|---|
| top | MDN Reference | number (必填) | - |
| bottom | MDN Reference | number (必填) | - |
| left | MDN Reference | number (必填) | - |
| right | MDN Reference | number (必填) | - |
| height | MDN Reference | number (必填) | - |
| width | MDN Reference | number (必填) | - |
| x | MDN Reference | number (必填) | - |
| y | MDN Reference | number (必填) | - |
BasicTarget
export type BasicTarget<T extends TargetType = Element> = (() => TargetValue<T>) | TargetValue<T> | MutableRefObject<TargetValue<T>>;
TargetValue
type TargetValue<T> = T | undefined | null;
TargetType
type TargetType = HTMLElement | Element | Window | Document | EventTarget;