为什么不能将 ref 传递给 React 中的功能组件?

Ven*_*sky 14 reactjs react-ref

为什么不能将 ref 传递给 React 中的功能组件?

与无法向其传递引用的类组件相比,函数组件有何不同?

为什么那不可能呢?

注意:我提出这个问题是因为我总是看到有关如何将 ref 与功能组件一起使用的解释,并且您需要使用fowardRef,但没有人解释 React 如何处理功能组件,从而无法将 ref 传递给它,它总是解释如何去做,但从来没有解释为什么你需要这样做。

Den*_*ash 6

当您传递ref给类组件时,它会(通过ref.current)指向实际的类实例。(看旧版 React 文档中的“访问引用”。)这使您可以访问该实例的字段。但是函数组件没有实例或字段,因此没有任何东西可以指向,ref没有任何东西可以使用。

\n

而且,需要明确的是,forwardRef这并没有真正改变这一点。forwardRef还是不让ref指向该实例,因为仍然没有一个。相反,forwardRef您可以将引用“转发”到另一个对象:嵌套组件(通常是 DOM 元素)或您定义的自定义对象(使用useImperativeHandle)。

\n

据推测,如果 React 今天是从头开始设计的,ref结果会有所不同。但由于它的历史 \xe2\x80\x94 因为它对于类组件有特殊含义 \xe2\x80\x94ref被保留。

\n

但是,您可以使用另一个 prop 名称,例如innerRef并将其用于转发,如为什么,到底,我们需要 React.forwardRef?

\n