React-useRef

  • useRef
    useRef 是 React 的一个 Hook,用来创建一个 可变的引用对象,这个引用对象在组件的整个生命周期内保持不变。
    翻译成人话就是,用useRef创建一个相对共享的对象管理器,它里面装的内容的读写是不会引起界面渲染的。
    典型的应用就是将某个界面控件放到里面,然后在适当的时候调出操作,比如获取 DOM 元素的引用,可以像原生 JavaScript 的 document.getElementById 一样,获取 DOM 元素。
javascript 复制代码
import React, { useRef } from 'react';

function FocusInput() {
  const inputRef = useRef(null);

  const handleClick = () => {
    inputRef.current.focus();  // 获取 input 元素并聚焦
  };

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={handleClick}>点击聚焦</button>
    </div>
  );
}

如果要手动存放,则直接 const handlerRef = useRef(null); handlerRef.current = 'abcd'/1234/handlerRef.current = handler; current可以装任何类型

比如如果在页面初始化时需要调用后端api,我一般将操作放在useLayoutEffect里面,但是useLayoutEffect会被至少执行两次! 下面用useRef防止重复调用:

javascript 复制代码
// 使用 ref 确保 updateCounter 只执行一次
  const counterUpdatedRef = useRef(false);
  // 使用 useLayoutEffect 确保在渲染完成后再设置返回处理函数
  useLayoutEffect(() => {
    const doit = async () => {
      // 确保 updateCounter 只执行一次
      if (!counterUpdatedRef.current && curTask?.id) {
        await updateCounter();
        counterUpdatedRef.current = true;
      }
      ...
    };

    doit();
  }, [curTask, setBackHandler])
相关推荐
To_OC18 分钟前
写了 5 个表单 Demo 后,我终于彻底搞懂了 React 受控与非受控组件
前端·react.js·前端框架
码哥DFS2 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
满栀5852 小时前
vue动态路由效果
前端·javascript·vue.js·前端框架·vue
jjw_zyfx3 小时前
css vue vite实现闪烁的呼吸效果
javascript·css·vue.js
sunly_4 小时前
React useActionState 的用法详解
前端·javascript·react.js
cyadyx5 小时前
【Three.js】Three.js 中加载 3D 模型
前端·javascript·3d
汉堡大王95275 小时前
前端工程师 TypeScript 上手指南:一条清晰的从入门到精通路线
前端·javascript·react.js
wear工程师5 小时前
防抖为什么会失效?React 面试里的闭包和定时器
javascript·react.js
浅水壁虎5 小时前
vue基础(第四章 Pinia)
前端·javascript·vue.js
张元清6 小时前
React useEventSource Hook:自带断线重连的 Server-Sent Events (2026)
javascript·react.js