当前位置:首页 > React

react ref 如何使用

2026-02-12 06:55:36React

React Refs 的基本概念

Refs 提供了一种直接访问 DOM 节点或 React 组件实例的方式。通常用于需要直接操作 DOM 或触发组件方法的场景,例如输入框聚焦、动画控制等。

创建 Refs

使用 React.createRef()useRef Hook 创建 ref 对象。

类组件中使用 createRef

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

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

函数组件中使用 useRef

react ref 如何使用

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

  return <div ref={myRef} />;
}

访问 Refs

通过 ref 对象的 current 属性访问 DOM 节点或组件实例。

访问 DOM 节点

react ref 如何使用

function TextInput() {
  const inputRef = React.useRef(null);

  const focusInput = () => {
    inputRef.current.focus();
  };

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={focusInput}>Focus Input</button>
    </div>
  );
}

访问类组件实例

class CustomInput extends React.Component {
  focus() {
    this.inputRef.current.focus();
  }

  render() {
    return <input ref={this.inputRef} />;
  }
}

function ParentComponent() {
  const customInputRef = React.useRef(null);

  const handleClick = () => {
    customInputRef.current.focus();
  };

  return (
    <div>
      <CustomInput ref={customInputRef} />
      <button onClick={handleClick}>Focus Custom Input</button>
    </div>
  );
}

回调 Refs

回调 ref 是一种动态设置 ref 的方式,适用于 ref 需要动态变化的情况。

function CallbackRefExample() {
  let textInput = null;

  const setTextInputRef = (element) => {
    textInput = element;
  };

  const focusTextInput = () => {
    if (textInput) textInput.focus();
  };

  return (
    <div>
      <input type="text" ref={setTextInputRef} />
      <button onClick={focusTextInput}>Focus Input</button>
    </div>
  );
}

转发 Refs(Forwarding Refs)

通过 React.forwardRef 将 ref 传递给子组件,适用于高阶组件或封装通用逻辑的组件。

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

function App() {
  const buttonRef = React.useRef(null);

  return (
    <div>
      <FancyButton ref={buttonRef}>Click Me</FancyButton>
    </div>
  );
}

注意事项

  • 避免过度使用 refs,优先使用 React 的状态和属性机制。
  • 函数组件没有实例,不能直接通过 ref 访问,除非使用 forwardRefuseImperativeHandle
  • 在组件挂载后(componentDidMountuseEffect)才能安全访问 ref。

分享给朋友:

相关文章

如何学react

如何学react

学习 React 的基础知识 React 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react 如何引入jquery

react 如何引入jquery

安装 jQuery 库 在 React 项目中引入 jQuery 的第一步是安装 jQuery。可以通过 npm 或 yarn 安装: npm install jquery # 或 yarn…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…