You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React forwardRef使用疑问:为何仅子组件需声明forwardRef?

关于React旧版本forwardRef的作用与使用位置

核心结论

forwardRef 只需要用在需要对外暴露自身内部DOM节点或子组件ref的自定义组件上,单纯传递ref的父组件不需要声明。

为什么MyInput需要forwardRef

自定义组件默认不会暴露内部的DOM节点:当你给自定义组件(比如MyInput)传递ref属性时,这个ref默认会指向MyInput的组件实例(旧版本中函数组件没有实例,甚至会报错),而不是内部的<input> DOM元素。

所以MyInput必须用forwardRef来接收外部传入的ref,并把它转发绑定到内部的原生<input>元素上,这样外部(比如Form组件)拿到的ref才能直接操作真实DOM。示例逻辑如下:

const MyInput = React.forwardRef((props, ref) => {
  // 把外部传入的ref绑定到内部的input元素
  return <input ref={ref} {...props} />;
});

为什么Form不需要forwardRef

Form组件的角色是传递ref的发起方,而非需要对外暴露内部元素的组件:

  • Form只是把自己创建的(或从父组件接收的)ref传递给子组件MyInput,它本身并没有被外部要求暴露内部的MyInput或其他DOM节点。
  • 如果Form自己不需要被外部传入ref并转发给内部元素,就完全不需要用forwardRef。

一句话总结使用场景

当你写的自定义组件需要让外部通过ref直接访问到组件内部的DOM节点或子组件时,才给这个组件套上forwardRef;单纯作为父组件传递ref给子组件的,不需要。

内容的提问来源于stack exchange,提问作者copenndthagen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:25:56