在 React 应用中,有哪些方法可以获取某个组件渲染后对应的 DOM 节点?请描述它们的适用场景或限制。
考察说明
考查对 React 中 DOM 引用(ref)机制的理解与应用能力。
回答思路
- 【回答框架 1】在 React 中,主要通过 ref 对象来获取组件对应的 DOM 元素。对于函数组件,可使用 useRef 创建 ref 并赋值给 JSX 元素的 ref 属性,该 ref 对象的 current 属性会指向对应的 DOM 节点。
- 【回答框架 2】对于类组件,可以使用 React.createRef 创建 ref,同样赋值给元素 ref 属性,或者使用回调 ref 函数,它会在组件挂载或卸载时被调用,分别传入 DOM 节点或 null。
- 【回答框架 3】当需要获取的是自定义类组件的实例时,ref 会指向组件的实例;但函数组件默认不暴露实例,若需访问其内部 DOM,可使用 forwardRef 转发 ref。
- 【回答框架 4】直接操作 DOM 的场景有限,更多应通过状态或受控组件管理数据;ref 常用于管理焦点、文本选择、媒体播放或集成第三方 DOM 库。
- 【回答框架 5】在函数组件中,useRef 创建的 ref 对象在生命周期内保持不变,且可用于保存可变值,但更新 ref 不会触发重新渲染。
- 【关键点 1】函数组件通过 useRef 获取 DOM 元素。
- 【关键点 2】类组件可通过 createRef 或回调 ref 获取。
- 【关键点 3】forwardRef 可用于函数组件向父组件暴露 DOM 引用。
- 【关键点 4】ref 的 current 属性指向实际 DOM 节点。
- 【关键点 5】不可滥用 ref,应当优先使用声明式状态管理。
- 【易错点 1】在函数组件中不能直接在自定义组件上使用 ref 获取其内部 DOM,必须配合 forwardRef。
- 【易错点 2】ref 回调在组件更新时会先传入 null 再传入新节点,需处理空值情况。
- 【易错点 3】避免在渲染阶段读取或修改 ref 的 current 值,应放在副作用或事件回调中。