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。
相关推荐
爱分享的程序员29 分钟前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
翻滚吧键盘34 分钟前
vue 条件渲染(v-if v-else-if v-else v-show)
前端·javascript·vue.js
vim怎么退出35 分钟前
万字长文带你了解微前端架构
前端·微服务·前端框架
你这个年龄怎么睡得着的36 分钟前
为什么 JavaScript 中 'str' 不是对象,却能调用方法?
前端·javascript·面试
Java水解38 分钟前
前端常用单位em/px/rem/vh/vm到底有什么区别?
前端
CAD老兵41 分钟前
Vite 如何借助 esbuild 实现极速 Dev Server 体验,并支持无 source map 的源码调试
前端
南屿im42 分钟前
JavaScript 手写实现防抖与节流:优化高频事件处理的利器
前端·javascript
Spider_Man42 分钟前
从零开始构建React天气应用:API集成与UI设计全指南 🌤️
前端·react.js
浩浩测试一下1 小时前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
西陵1 小时前
Nx带来极致的前端开发体验——借助CDD&TDD开发提效
前端·javascript·架构