当前位置:首页 > 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 才能暴露方法。

react中ref如何

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 元素或组件实例作为参数。

react中ref如何

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 一起使用。

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
分享给朋友:

相关文章

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

react 如何运行

react 如何运行

运行 React 项目的步骤 安装 Node.js 确保系统已安装 Node.js(建议版本 16+),可通过官网下载并安装。安装后验证版本: node -v npm -v 创建 React 项目…

react如何拓展

react如何拓展

React 拓展方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式,通过接收一个组件并返回一个新组件实现功能拓展。例如,为组件添加日志功能: function withLogging…

react如何打包

react如何打包

打包 React 项目的基本步骤 React 项目通常使用 create-react-app 或类似的脚手架工具创建,这些工具内置了打包功能。以下是打包 React 项目的详细方法: 安装依赖并构建…

react 如何debug

react 如何debug

React 调试方法 使用 React Developer Tools React Developer Tools 是浏览器扩展,支持 Chrome 和 Firefox。安装后,可以在开发者工具中查看…

react如何扩展

react如何扩展

扩展 React 项目的常用方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式。通过包裹组件并注入额外属性或逻辑,可以实现功能扩展。例如,一个日志记录的高阶组件: function…