今天来讲一下useRef,我们可以通过它来获取组件实例对象或者DOM对象。除此外,我们还可以用它来进行定义变量,存放值等操作。下面我们来讲useRef最常用的操作,即访问DOM节点。
一、基础用法
const refContainer = useRef(initialValue);
useRef 返回一个可变的 ref 对象,对象里只有一个current属性,返回的 ref 对象在组件的整个生命周期内保持不变。
二、具体案例
案例主要是通过useRef来获取红色区块的DOM节点,拿到它的宽高并做显示。
import React, { useState, useEffect, useRef } from 'react';
type sizeParams = {
width: number;
height: number;
};
const UseRefExample: React.FC = () => {
const [box, setBox] = useState<sizeParams>({
width: 500,
height: 400,
});
const [redBox, setRedBox] = useState<sizeParams>({
width: 0,
height: 0,
});
const boxRef = useRef<any>({});
useEffect(() => {
fetchSize();
}, []);
const fetchSize = () => {
setRedBox({ width: boxRef.current.offsetWidth, height: boxRef.current.offsetHeight });
};
return (
<div
style={{
width: `${box.width}px`,
height: `${box.height}px`,
background: '#ccc',
margin: '20px',
padding: '20px',
fontSize: '18px',
}}
>
<div
style={{
width: '70%',
height: '70%',
background: 'red',
marginBottom: '20px',
padding: '10px',
}}
ref={boxRef}
>
<p>红色区块</p>
<p>当前宽为:{redBox.width}px</p>
<p>当前高为:{redBox.height}px</p>
<button onClick={fetchSize}>点击获取红色区块当前宽高</button>
</div>
<button
onClick={() => {
setBox({ width: box.width + 20, height: box.height + 20 });
}}
>
点击更改灰色区块宽高
</button>
</div>
);
};
export default UseRefExample;
三、效果展示
由上述代码可知,我们红色区块的宽高是随着灰色区块的宽高改变而改变的。由下图我们可以看到,每次我们更改灰色区域的宽高后,只要点击红色区块的按钮就能获取当前红色区块改变后的宽高。
感谢您读完本文!如果本文对您有帮助,请点个赞呗,您的点赞是对我最大的支持和认可!
我的公众号:大前端教程,欢迎关注,会定期更新前端知识,希望能帮到您。
版权声明:本文为w544924116原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。