[React] forwardRef 作用是什么?【热度: 2,628】

forwardRef 是 React 提供的一个高阶函数,它可以让你在函数组件中访问子组件的 ref,并把该 ref 传递给子组件。

使用 forwardRef 的主要场景是,当你需要访问子组件的 DOM 节点或实例时,比如要操作子组件的滚动条、聚焦输入框等等。在这些场景下,需要用到 ref,而 ref 又不能直接在函数组件中使用。

下面是 forwardRef 的基本使用方式:

jsxCopy codeimport React, { forwardRef } from 'react';

const MyComponent = forwardRef((props, ref) => {
  return <input type="text" ref={ref} />;
});

function App() {
  const inputRef = React.createRef();

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

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

在上面的例子中,我们创建了一个 MyComponent 组件,并通过 forwardRef 来包裹它。这样,MyComponent 就可以在 props 中接收一个 ref 属性,而 forwardRef 将会将该属性转发到子组件中。

App 组件中,我们创建了一个 inputRef 对象,并将它作为 MyComponentref 属性传递给了 MyComponent 组件。然后,我们在 handleClick 函数中使用 inputRef 来聚焦输入框。

需要注意的是,forwardRef 的回调函数接收两个参数:propsref。其中,props 是组件的属性对象,ref 是回调函数中定义的 ref 对象。在函数组件中,我们必须将 ref 传递给要访问的子组件,否则 ref 将无法访问到子组件的 DOM 节点或实例。