当前位置:首页 > 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 一起使用。

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 为元素)。

react中ref如何

标签: reactref
分享给朋友:

相关文章

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactiv…

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式:…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app np…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yar…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…