我正在阅读有关 React useState()
和 useRef()
的“ Hooks FAQ ”,我对一些似乎同时使用 useRef 和 useState 解决方案的用例感到困惑,而且我不确定哪种方式正确。
来自 关于 useRef() 的“Hooks FAQ”:
“useRef() Hook 不仅适用于 DOM refs。‘ref’ 对象是一个通用容器,其当前属性是可变的并且可以保存任何值,类似于类上的实例属性。”
使用 useRef() :
function Timer() {
const intervalRef = useRef();
useEffect(() => {
const id = setInterval(() => {
// ...
});
intervalRef.current = id;
return () => {
clearInterval(intervalRef.current);
};
});
// ...
}
使用 useState() :
function Timer() {
const [intervalId, setIntervalId] = useState(null);
useEffect(() => {
const id = setInterval(() => {
// ...
});
setIntervalId(id);
return () => {
clearInterval(intervalId);
};
});
// ...
}
这两个示例将具有相同的结果,但哪个更好 - 为什么?
原文由 Haim763 发布,翻译遵循 CC BY-SA 4.0 许可协议
两者的主要区别是:
useState
导致重新渲染,useRef
不会。它们之间的共同点是,
useState
和useRef
都可以在重新渲染后记住它们的数据。因此,如果您的变量决定了视图层渲染,请使用useState
。其他使用useRef
我建议阅读这篇 文章。