interview
advanced-react
什么是 React.forwardRef它的作用是什么

React 进阶面试题, 什么是 React.forwardRef?它的作用是什么?

React 进阶面试题, 什么是 React.forwardRef?它的作用是什么?

QA

Step 1

Q:: 什么是 React.forwardRef?它的作用是什么?

A:: React.forwardRef 是 React 提供的一个高阶组件(HOC),用于将 ref 转发给其子组件中的某个元素。通常在父组件需要直接访问子组件的 DOM 元素或子组件中的某个元素时使用。通过使用 forwardRef,父组件可以获得子组件中 DOM 元素的引用,而不必在子组件中显式传递 ref。它的典型使用场景是在封装自定义组件时,需要让外部组件通过 ref 直接操作 DOM 元素。

Step 2

Q:: 如何使用 React.forwardRef?

A:: 使用 React.forwardRef 时,需要将其作为参数传递给函数组件,该函数组件会接受 props 和 ref 作为参数,并将 ref 传递给某个 DOM 元素或其他组件。例如:

 
const MyInput = React.forwardRef((props, ref) => (
  <input ref={ref} {...props} />
));
 

此时,父组件可以通过 ref 直接访问 MyInput 组件中的 input 元素。

Step 3

Q:: React.forwardRef 和 React.createRef 有什么区别?

A:: React.createRef 是用于创建一个 ref 对象,该对象可以通过 ref 属性附加到 React 元素上,并允许我们在父组件中访问子组件的 DOM 元素或组件实例。而 React.forwardRef 是用于将 ref 直接转发给子组件,使得父组件可以通过 ref 访问子组件内部的某个元素。两者通常结合使用,即通过 createRef 创建 ref,并通过 forwardRef 转发 ref。

Step 4

Q:: forwardRef 可以与 class 组件一起使用吗?

A:: 可以,但通常不直接在 class 组件中使用 forwardRef。forwardRef 主要用于函数组件中,使函数组件也能够接收 ref 并将其转发。在 class 组件中,我们通常直接使用 React.createRef() 来创建 ref,并通过 this.ref 访问子组件的 DOM 元素。

Step 5

Q:: 在什么场景下你会使用 React.forwardRef?

A:: React.forwardRef 通常在以下场景使用:1) 需要将 ref 转发给子组件中的某个 DOM 元素时,例如封装一个输入框组件并需要暴露其 focus 方法;2) 在高阶组件中,想要将 ref 传递给子组件而不是 HOC 本身;3) 需要兼容老旧代码或第三方库,需要将 ref 传递给内部的 DOM 元素。

用途

React`.`forwardRef 是用于解决组件之间 ref 转发问题的重要工具,特别是在封装库或设计可复用组件时非常有用。在实际生产环境中,当我们构建一些封装的、通用的组件库时,可能会遇到需要将 DOM 元素的操作能力暴露给使用该组件的父组件的需求。这时,使用 forwardRef 能够很方便地让父组件获得对子组件内部元素的直接控制权,从而实现更多高级功能,例如表单处理、动画触发等。\n

相关问题

🦆
什么是 React.createRef?

React.createRef 是 React 提供的 API,用于创建一个 ref 对象。这个对象可以通过 ref 属性附加到 React 元素上,从而允许开发者在父组件中访问子组件的 DOM 元素或组件实例。

🦆
什么是 React.useImperativeHandle?

React.useImperativeHandle 是一个 React Hook,配合 forwardRef 使用,可以让父组件只暴露特定的实例值,而不是整个子组件的引用。这对于控制父组件能访问子组件的哪些方法和属性非常有用。

🦆
在函数组件中如何管理 DOM 元素的引用?

在函数组件中,可以使用 React.useRef 来管理 DOM 元素的引用。useRef 可以创建一个可变的 ref 对象,其 .current 属性初始化时为传递给 ref 属性的 DOM 元素,并在组件生命周期中保持不变。

🦆
什么是高阶组件HOC?

高阶组件(Higher-Order Component, HOC)是 React 中一种复用组件逻辑的技术。它接受一个组件并返回一个新的组件,通常用于增强原组件的功能或处理某些公共逻辑。HOC 不是 React API 的一部分,而是一种设计模式。

🦆
React.forwardRef 与 HOC 如何结合使用?

在高阶组件中,如果你需要将 ref 传递给被包裹的组件而不是 HOC 本身,可以使用 React.forwardRef 来转发 ref。这使得 HOC 不会拦截 ref 的传递,依然可以访问被包裹组件的实例或 DOM 元素。