Skip to content

forwardRef 作用是什么?

Posted on:2024年8月15日 at 18:43

forwardRef 是 React 的一个高阶组件(HOC),用于将父组件的 ref 转发到子组件的 DOM 节点或组件实例中。它使得父组件能够直接访问子组件的 DOM 元素或方法。这在一些情况下非常有用,比如需要在父组件中操作子组件的 DOM 元素或调用子组件的方法时。

使用场景

  1. 访问子组件的 DOM 节点: 当需要对子组件的 DOM 元素进行操作(例如,获取焦点、调整大小等),而这个子组件是由其他组件包裹的情况下。

  2. 组合高阶组件和 ref 在使用高阶组件(HOC)时,ref 不会自动转发到被包裹的组件中。使用 forwardRef 可以将 ref 转发到正确的组件或 DOM 元素。

基本用法

import React, { forwardRef, useRef, useImperativeHandle } from "react";

// 子组件
const Input = forwardRef((props, ref) => {
  const inputRef = useRef(null);

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

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

// 父组件
function ParentComponent() {
  const inputRef = useRef(null);

  const handleClick = () => {
    if (inputRef.current) {
      inputRef.current.focus(); // 调用子组件的 focus 方法
    }
  };

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

export default ParentComponent;

关键点

原文转自:https://fe.ecool.fun/topic/3cd5964c-8b82-4bba-9ce2-116c2707b83f