当前位置:首页 > React

react中ref如何

2026-01-23 17:26:28React

使用 useRef Hook 创建 ref

在函数组件中,可以通过 useRef Hook 创建一个 ref 对象。useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数。

import React, { useRef } from 'react';

function MyComponent() {
  const myRef = useRef(null);

  return <div ref={myRef}>Hello, World!</div>;
}

访问 DOM 元素或组件实例

通过 ref 的 .current 属性可以访问绑定的 DOM 元素或类组件实例。对于函数组件,需要使用 forwardRefuseImperativeHandle 才能暴露方法。

const inputRef = useRef(null);

// 聚焦输入框
inputRef.current.focus();

在类组件中使用 createRef

类组件中可以使用 React.createRef() 创建 ref,并通过 this 访问。

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }

  render() {
    return <div ref={this.myRef}>Hello, World!</div>;
  }
}

回调 ref

可以通过传递函数的方式创建 ref,该函数会在组件挂载或卸载时被调用,接收 DOM 元素或组件实例作为参数。

function MyComponent() {
  const setInputRef = (element) => {
    if (element) {
      element.focus();
    }
  };

  return <input ref={setInputRef} />;
}

转发 ref 到函数组件

函数组件默认不支持 ref,需要使用 React.forwardRef 将 ref 转发到内部 DOM 元素或类组件。

const FancyButton = React.forwardRef((props, ref) => (
  <button ref={ref} className="FancyButton">
    {props.children}
  </button>
));

// 使用
const ref = useRef(null);
<FancyButton ref={ref}>Click me!</FancyButton>;

暴露自定义方法给父组件

通过 useImperativeHandle 可以自定义暴露给父组件的 ref 值,通常与 forwardRef 一起使用。

react中ref如何

const FancyInput = React.forwardRef((props, ref) => {
  const inputRef = useRef();

  useImperativeHandle(ref, () => ({
    focus: () => {
      inputRef.current.focus();
    }
  }));

  return <input ref={inputRef} />;
});

// 父组件调用
const ref = useRef(null);
ref.current.focus();

ref 的注意事项

  • ref 不能在函数组件上直接使用,除非使用 forwardRef
  • 避免过度使用 ref,优先考虑状态提升或上下文管理。
  • ref 更新不会触发组件重新渲染。
  • 回调 ref 在组件更新时会被调用两次(旧 ref 为 null,新 ref 为元素)。

标签: reactref
分享给朋友:

相关文章

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 3 中,ref 是一个用于创建响应式数据的核心 API。它可以将基本类型或对象包装为一个响应式引用,通过 .value 访问或修改其值。 基本用法 impor…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全局安…

如何安装react

如何安装react

安装React的方法 方法一:使用Create React App(官方推荐) Create React App是官方提供的脚手架工具,适合快速搭建React项目。确保已安装Node.js(建议版本≥…

react如何启动

react如何启动

启动 React 项目的步骤 确保已安装 Node.js React 需要 Node.js 环境运行,建议安装最新稳定版(LTS)。可通过以下命令检查是否已安装: node -v npm -v…

如何搭建react项目

如何搭建react项目

使用 Create React App 搭建项目 Create React App (CRA) 是官方推荐的快速搭建 React 项目的工具,无需配置构建工具(如 Webpack 或 Babel)。…