当前位置: 首页 > article >正文

React——useRef()

useRef 是 React 的一个 Hook,用于在组件的整个生命周期内持久化保存数据。主要有以下几个用途:

  1. 存储对 DOM 节点的引用:通过给 DOM 元素添加 ref 属性来直接访问实际的 DOM 节点。这常用于需要直接操作 DOM 时,比如管理焦点、文本选择或媒体播放。

    示例代码:

function TextInputWithFocusButton() {
   const inputEl = useRef(null);
   
   const onButtonClick = () => {
     // `current` 指向挂载到 `input` 元素的真实 DOM 节点
     inputEl.current.focus();
   };
   
   return (
     <>
       <input ref={inputEl} type="text" />
       <button onClick={onButtonClick}>Focus the input</button>
     </>
   );
 }
  1. 保存组件状态跨渲染周期不变的数据useRef 返回的对象在组件的整个生命周期内保持不变,可以用来保存任何可变值。与实例属性类似,当你想要保存不需触发视图重新渲染的数据时,可以使用 useRef

    示例代码:

function TimerComponent() {
    const intervalRef = useRef();
    
    useEffect(() => {
      const id = setInterval(() => {
        // ...每隔一段时间执行的操作...
      }, 1000);
      intervalRef.current = id;
      return () => clearInterval(intervalRef.current);
    }, []);
    
    // ...
  }
  1. 追踪组件是否已经挂载或卸载:有时我们需要知道组件是否仍然挂载在 DOM 上,以避免在异步操作(如 API 调用)完成后调用 setState 导致的潜在错误。

    示例代码:

function MyComponent() {
    const isMountedRef = useRef(true);
    
    useEffect(() => {
      return () => {
        // 组件卸载时更新 ref 的值
        isMountedRef.current = false;
      };
    }, []);
    
    // 使用 isMountedRef.current 确认组件是否挂载
  }
  1. 作为实例变量:对于需要存储任何可变值而又不想导致组件重新渲染的场景非常有用。因为 useRef 创建的是一个普通 JavaScript 对象,其 .current 属性被初始化为传入的参数(useRef 的初始值),这个值可以自由更改。

总结来说,useRef 主要用于访问 DOM 节点、保存可变数据和跟踪组件挂载状态,且对它所保存的数据的修改不会触发组件的重新渲染。


http://www.kler.cn/a/280370.html

相关文章:

  • Qt: QComboBox
  • 美国高防服务器测评
  • 安卓AppBarLayout与ViewPager2里的fragment里的webview滑动冲突
  • openlayers10+vue3+ts
  • 视创云展线上3D云展,在线自由创作!
  • 买小鹏M03别急,我来浇两盆冷水
  • echarts最新封装柱状图
  • ASP.NET Core 入门教学四 集成Redis
  • SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)
  • SQLi-LABS靶场36-40通过攻略
  • Flask+LayUI开发手记(三):LayUI表格的后端数据分页展现
  • Redis持久化RDB/AOF
  • Spring Boot 应用中注册和使用 Filter
  • 大数据技术之 Flume概述、安装(1)
  • xshell 终端选中文本后自动执行ctrl+c
  • 【机器学习】逻辑回归
  • 【React原理 - 任务调度之中断恢复】
  • 软件测试学习笔记丨Pytest配置文件
  • Leetcode 46. 全排列 排列型回溯 C++实现
  • JS WebSocket 深度解析