在 React 中获取元素的宽度
Get the Width of an Element in React
在 React 中获取元素的宽度:
ref
在元素上设置道具。- 在
useLayoutEffect
挂钩中,更新宽度的状态变量。 - 使用该
offsetWidth
属性获取元素的宽度。
应用程序.js
import {useLayoutEffect, useRef, useState} from 'react'; export default function App() { const ref = useRef(null); const [width, setWidth] = useState(0); const [height, setHeight] = useState(0); useLayoutEffect(() => { setWidth(ref.current.offsetWidth); setHeight(ref.current.offsetHeight); }, []); return ( <div ref={ref}> <h2>Width: {width}</h2> <h2>Height: {height}</h2> </div> ); }
useRef ()钩子可以传递一个初始值作为参数。该钩子返回一个可变的 ref 对象,其.current
属性被初始化为传递的参数。
请注意,我们必须访问
current
ref 对象上的属性才能访问我们设置prop的div
元素。 ref
当我们将 ref prop 传递给元素时,例如<div ref={myRef} />
,React 将.current
ref 对象的属性设置为相应的 DOM 节点。
我们将一个空的 dependencies 数组传递给
useLayoutEffect
挂钩,因此它只会在组件安装时运行。
应用程序.js
useLayoutEffect(() => { setWidth(ref.current.offsetWidth); setHeight(ref.current.offsetHeight); }, []);
该useLayoutEffect
钩子与 相同useEffect
,但在所有 DOM 变更后同步触发。
该useLayoutEffect
钩子通常用于从 DOM 中读取布局。
我们使用useLayoutEffect
钩子是因为我们需要等待ref
在元素上设置 并等待元素呈现,然后才能访问它的
offsetHeight
和offsetWidth
属性。
offsetWidth
属性返回元素
的宽度(以像素为单位),包括任何边框、填充和垂直滚动条(如果存在)。
offsetHeight
属性返回元素
的高度(以像素为单位),包括垂直填充和边框。
或者,您可以使用
clientWidth
属性,它以像素为单位返回元素的宽度,包括填充但不包括边框、边距和垂直滚动条(如果存在)。
应用程序.js
useLayoutEffect(() => { setWidth(ref.current.clientWidth); setHeight(ref.current.clientHeight); }, []);
clientHeight属性返回元素的
内部高度(以像素为单位)。它包括填充但不包括边框、边距和水平滚动条(如果存在)。