在 React 中获取元素的宽度

在 React 中获取元素的宽度

Get the Width of an Element in React

在 React 中获取元素的宽度:

  1. ref在元素上设置道具。
  2. useLayoutEffect挂钩中,更新宽度的状态变量。
  3. 使用该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属性被初始化为传递的参数。

请注意,我们必须访问currentref 对象上的属性才能访问我们设置prop的div元素。 ref

当我们将 ref prop 传递给元素时,例如<div ref={myRef} />,React 将.currentref 对象的属性设置为相应的 DOM 节点。

我们将一个空的 dependencies 数组传递给
useLayoutEffect
挂钩,因此它只会在组件安装时运行。

应用程序.js
useLayoutEffect(() => { setWidth(ref.current.offsetWidth); setHeight(ref.current.offsetHeight); }, []);

useLayoutEffect钩子与 相同useEffect,但在所有 DOM 变更后同步触发。

useLayoutEffect钩子通常用于从 DOM 中读取布局。

我们使用useLayoutEffect钩子是因为我们需要等待ref在元素上设置 并等待元素呈现,然后才能访问它的
offsetHeightoffsetWidth属性。

offsetWidth
属性返回
元素
的宽度(以像素为单位),包括任何边框、填充和垂直滚动条(如果存在)。

offsetHeight
属性返回
元素
的高度(以像素为单位),包括垂直填充和边框。

或者,您可以使用
clientWidth
属性,它以像素为单位返回元素的宽度,包括填充但不包括边框、边距和垂直滚动条(如果存在)。

应用程序.js
useLayoutEffect(() => { setWidth(ref.current.clientWidth); setHeight(ref.current.clientHeight); }, []);

clientHeight属性返回元素的

内部高度(以像素为单位)。
它包括填充但不包括边框、边距和水平滚动条(如果存在)。

发表评论