React 中如何创建Refs

useRef

js 复制代码
import React, { useRef, useEffect } from "react";

function MyComponent() {
  const myRef = useRef(null); // 创建 Ref

  useEffect(() => {
    // 访问 DOM 元素
    myRef.current.focus();
  }, []);

  return <input type="text" ref={myRef} />;
}

export default MyComponent;

回调ref

你也可以在函数组件中使用回调 Refs。这种方式下,你会提供 一个函数,该函数会在组件挂载和卸载时分别被调用,并将 DOM 节点或 组件实例作为参数。

js 复制代码
import React, { useState, useEffect } from "react";


function MyComponent() {
  const [ref, setRef] = useState(null)

  useEffect(() => {
    if(ref){
        // 你现在可以访问 dom 节点或组件实例
    }
  }, [ref]);

  return <input type="text" ref={node => setRef(node)} />;
}

export default MyComponent;

这两种创建 Ref 的方式主要区别在于:

  • React.useRef() 创建的 Ref 更简洁,API 更一致,而且 Ref 的值在组件的整个生命周期中保持不变。
  • 回调 Refs 更灵活,它允许你在组件挂载和卸载时执行一些额外的逻辑。但 是,如果回调函数是在 render 方法中定义的,那么每次 render 时都 会创建一个新的函数实例,可能会导致一些性能问题。
  • 除非你有特殊需求,否则建议使用 React.useRef() 来创建 Ref。
相关推荐
longze_72 小时前
Vue中:deep()和 ::v-deep选择器的区别
前端·javascript·vue.js
太阳伞下的阿呆5 小时前
本地环境vue与springboot联调
前端·vue.js·spring boot
阳光是sunny6 小时前
走进微前端(1)手写single-spa核心原理
前端·javascript·vue.js
烛阴7 小时前
Ceil -- 从平滑到阶梯
前端·webgl
90后的晨仔7 小时前
🔍Vue 模板引用(Template Refs)全解析:当你必须操作 DOM 时
前端·vue.js
90后的晨仔7 小时前
👂 Vue 侦听器(watch)详解:监听数据的变化
前端·vue.js
90后的晨仔7 小时前
深入浅出 Vue 的 computed:不仅仅是“计算属性”那么简单!
前端·vue.js
Nan_Shu_6147 小时前
学习:入门uniapp Vue3组合式API版本(17)
前端·vue.js·学习·uni-app
止观止8 小时前
Remix框架:高性能React全栈开发实战
前端·react.js·前端框架·remix
萌萌哒草头将军8 小时前
🚀🚀🚀 深入探索 Node.js v22.18.0 新特性;默认支持运行 ts 文件了!
前端·typescript·node.js