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])
相关推荐
云中飞鸿4 分钟前
函数:委托
javascript
老前端的功夫1 小时前
前端技术选型的理性之道:构建可量化的ROI评估模型
前端·javascript·人工智能·ubuntu·前端框架
狮子座的男孩1 小时前
js函数高级:04、详解执行上下文与执行上下文栈(变量提升与函数提升、执行上下文、执行上下文栈)及相关面试题
前端·javascript·经验分享·变量提升与函数提升·执行上下文·执行上下文栈·相关面试题
爱学习的程序媛2 小时前
《JavaScript权威指南》核心知识点梳理
开发语言·前端·javascript·ecmascript
乐观主义现代人2 小时前
go 面试
java·前端·javascript
2501_941886863 小时前
多语言微服务架构下的微服务熔断与限流优化实践
javascript
tsumikistep3 小时前
【前后端】Vue 脚手架与前端工程结构入门指南
前端·javascript·vue.js
慧慧吖@4 小时前
关于在本地去模拟生产环境检测页面内容注意事项
前端·javascript·vue.js
黄团团4 小时前
Vue2整合Electron开发桌面级应用以及打包发布(提供Gitee源码)
前端·javascript·vue.js·elementui·electron
东东2335 小时前
GeoJSON 介绍:Web 地图数据的通用语言
前端·javascript·json