useRef

收藏566

阅读2223

更新时间2025-08-20

useRef Hook 允许您在渲染之间保持值。

它可以用来存储一个在更新时不会导致重新渲染的可变值。

它可以用来直接访问一个DOM元素。


不会导致重新渲染

如果我们尝试使用 useState Hook 计算应用程序渲染的次数,我们将陷入无限循环,因为该 Hook 本身会导致重新渲染 .

为了避免这种情况,我们可以使用 useRef Hook。

实例:

使用 useRef 来跟踪应用程序渲染。

import { useState, useEffect, useRef } from "react";
import ReactDOM from "react-dom/client";

function App() {
  const [inputValue, setInputValue] = useState("");
  const count = useRef(0);

  useEffect(() => {
    count.current = count.current + 1;
  });

  return (
    <>
       setInputValue(e.target.value)}
      />
      

Render Count: {count.current}

); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();

运行实例 »

useRef() 只返回一项。 它返回一个名为 current 的对象。

当我们初始化 useRef 时,我们设置了初始值:useRef(0)

就像这样做:const count = {current: 0}。 我们可以使用 count.current 来访问计数。

在您的计算机上运行此程序并尝试输入输入以查看应用程序渲染计数增加。


访问 DOM 元素

一般来说,我们希望让 React 处理所有 DOM 操作。

但在某些情况下,可以使用 useRef 而不会引起问题。

在 React 中,我们可以为元素添加 ref 属性,以便直接在 DOM 中访问它。

实例:

使用 useRef 聚焦输入:

import { useRef } from "react";
import ReactDOM from "react-dom/client";

function App() {
  const inputElement = useRef();

  const focusInput = () => {
    inputElement.current.focus();
  };

  return (
    <>
      
      
    
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render();

运行实例 »


跟踪状态变化

useRef Hook 也可用于跟踪之前的状态值。

这是因为我们能够在渲染之间保持 useRef 值。

实例:

使用 useRef 来跟踪之前的状态值:

import { useState, useEffect, useRef } from "react";
import ReactDOM from "react-dom/client";

function App() {
  const [inputValue, setInputValue] = useState("");
  const previousInputValue = useRef("");

  useEffect(() => {
    previousInputValue.current = inputValue;
  }, [inputValue]);

  return (
    <>
       setInputValue(e.target.value)}
      />
      

Current Value: {inputValue}

Previous Value: {previousInputValue.current}

); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();

运行实例 »

这次我们使用 useStateuseEffectuseRef 来跟踪之前的状态。

useEffect 中,每次 inputValue 通过在输入字段中输入文本来更新。


相关

视频

RELATED VIDEOS

更多

免费

Web前端开发极速入门
初级 Web前端开发极速入门

219920次学习

收藏

免费

前端入门_HTML5
初级 前端入门_HTML5

616946次学习

收藏

免费

30分钟学会网站布局
初级 30分钟学会网站布局

238440次学习

收藏

免费

CSS视频教程-玉女心经版
初级 CSS视频教程-玉女心经版

393054次学习

收藏

免费

独孤九贱(1)_HTML5视频教程

免费

独孤九贱(6)_jQuery视频教程

免费

独孤九贱(7)_Bootstrap视频教程

免费

独孤九贱(2)_CSS视频教程
初级 独孤九贱(2)_CSS视频教程

229605次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.8万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

71万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.7万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号