React 中的 useRef Hook 用于创建一个可变的引用对象,用于存储某些值,并且可以在整个组件的生命周期中保持不变。
使用 useRef 的时机:
- 存储 DOM 元素:在组件中,需要获取某个 DOM 元素的引用,以便在后续操作中使用。
- 存储某些状态:在组件中,需要存储某些状态,而这些状态不需要被触发重新渲染。
- 缓存某些计算结果:在组件中,需要缓存某些计算结果,以便在后续操作中重复使用。
- 实现某些定时器或 interval:在组件中,需要实现某些定时器或 interval,以便在后续操作中使用。
使用 useRef 的优点:
- 不触发重新渲染:使用
useRef 存储的值不会触发组件的重新渲染。 - 可变的引用:使用
useRef 创建的引用对象是可变的,可以在整个组件的生命周期中保持不变。
useRef 的基本语法:
import { useRef } from 'react';
function Example() {
const inputRef = useRef(null);
const handleClick = () => {
inputRef.current.focus();
};
return (
<div>
<input ref={inputRef} type='text' />
<button onClick={handleClick}>Focus input</button>
</div>
);
}
在上面的示例中,我们使用 useRef 创建了一个名为 inputRef 的引用对象,并将其关联到一个输入框上。在 handleClick 函数中,我们可以使用 inputRef.current 来获取输入框的引用,并调用其 focus() 方法。
其他使用 useRef 的示例:
const countRef = useRef(0);
countRef.current += 1;
const cachedResultRef = useRef(null);
if (!cachedResultRef.current) {
cachedResultRef.current = someExpensiveCalculation();
}
const result = cachedResultRef.current;
const timerRef = useRef(null);
timerRef.current = setInterval(() => {
console.log('Timer ticked!');
}, 1000);
总之,useRef 是一个非常有用的 Hook,用于存储某些值,并且可以在整个组件的生命周期中保持不变。