当前位置:首页 > 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

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

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

访问 Refs

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

访问 DOM 节点

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 传递给子组件,适用于高阶组件或封装通用逻辑的组件。

react 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 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…

react 如何运行

react 如何运行

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

react如何拓展

react如何拓展

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

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

react如何创建框架

react如何创建框架

React 创建框架的方法 React 本身是一个用于构建用户界面的 JavaScript 库,但可以通过多种方式创建框架或项目结构。以下是几种常见的方法: 使用 Create React App…