interview
advanced-react
React 中 refs 的作用是什么有哪些应用场景

React 进阶面试题, React 中 refs 的作用是什么?有哪些应用场景?

React 进阶面试题, React 中 refs 的作用是什么?有哪些应用场景?

QA

Step 1

Q:: React 中 refs 的作用是什么?

A:: 在 React 中,refs(引用)是用来直接访问 DOM 元素或 React 组件实例的方式。通常情况下,React 提倡通过 state 和 props 来管理数据流和组件交互,但在某些情况下,直接访问 DOM 元素是不可避免的,例如需要操作未被 React 控制的第三方库或者需要直接读取某些 DOM 元素的属性时,使用 refs 是非常有用的。

Step 2

Q:: refs 的应用场景有哪些?

A:: 1. 管理焦点、文本选择或媒体播放。 2. 触发必要的动画。 3. 与第三方 DOM 库集成。 4. 读取未通过 React 处理的 DOM 元素的值(例如表单元素的值)。 5. 强制组件重新渲染或获取组件实例的状态。

Step 3

Q:: 如何在 React 中创建和使用 refs?

A:: 在 React 中,可以使用 React.createRef() 创建一个 ref 对象,然后将其附加到 JSX 元素上,通过 this.refs 或者 ref.current 访问对应的 DOM 元素或组件实例。例如:

 
class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }
 
  componentDidMount() {
    console.log(this.myRef.current); // 访问 DOM 元素
  }
 
  render() {
    return <div ref={this.myRef}>Hello, world!</div>;
  }
}
 

Step 4

Q:: 在函数组件中如何使用 refs?

A:: 在函数组件中,可以使用 useRef Hook 来创建一个 ref 对象,并将其赋值给需要访问的 DOM 元素。与类组件的 ref 不同,useRef 不会触发重新渲染。例子如下:

 
import React, { useRef, useEffect } from 'react';
 
function MyComponent() {
  const myRef = useRef(null);
 
  useEffect(() => {
    console.log(myRef.current); // 访问 DOM 元素
  }, []);
 
  return <div ref={myRef}>Hello, world!</div>;
}
 

Step 5

Q:: 在 React 中使用 refs 有什么限制?

A:: React 中的 refs 应该被谨慎使用,因为它们绕过了 React 的声明式数据流。最好只在无法通过其他方式实现需求的情况下使用 refs。此外,不能在函数组件的 return 语句中直接调用 useRef Hook,而应该在组件的顶层调用 useRef。

用途

这个内容在实际生产环境中非常重要,主要用于那些需要直接操作 DOM 的场景,尤其是在处理复杂的用户交互、与第三方库集成或者需要手动操控组件的生命周期时。掌握 refs 的使用有助于开发者应对这些常见但复杂的需求,同时也能够编写更具表现力和交互性的组件。面试时考察这个内容,能够评估候选人对 React 组件内部实现的理解程度,以及在特定场景下解决问题的能力。\n

相关问题

🦆
在 React 中,什么时候应该避免使用 refs?

应尽量避免使用 refs 来实现可以通过声明式代码完成的需求,比如组件内部状态管理、表单处理等。一般来说,如果能通过 React 的 state 和 props 来管理组件行为和数据流,那么应避免使用 refs。

🦆
什么是受控组件和非受控组件?如何在 React 中使用它们?

受控组件是指其表单数据由 React 组件的 state 控制的组件,而非受控组件则是通过 refs 或者 DOM 节点自己管理其内部状态的组件。使用受控组件可以使得表单处理更具可控性,而非受控组件则适合简单的场景或需要与非 React 环境的库整合时使用。

🦆
如何通过 React 处理表单?

React 中的表单处理通常通过受控组件来实现,即组件的 state 与表单的输入值保持同步,通过 onChange 事件更新 state,并通过 state 渲染表单值。这种方式使得表单值始终处于 React 的控制之下,便于统一管理。

🦆
React 中 useEffect 和 refs 的配合使用场景有哪些?

在组件挂载后需要立即执行某些 DOM 操作的场景,如焦点管理、滚动定位、动画触发等,useEffect 可以与 refs 配合使用。通过 useEffect 设置特定的副作用,并利用 refs 引用对应的 DOM 元素,确保操作发生在组件渲染之后。