Javascript 在React in stateful组件中使用REF

Javascript 在React in stateful组件中使用REF,javascript,reactjs,react-component,react-ref,Javascript,Reactjs,React Component,React Ref,这个问题更倾向于执行的性能或最佳实践 根据React文档,refs是React16的一部分,只能在基于类(有状态)的组件中使用。由于无状态组件没有实例或状态,因此无状态组件中不能有引用 将无状态组件更改为有状态组件或基于类的组件以使用REF的权衡是什么?这是一种推荐的方法,或者如果只是关于refs,我们可以使用文档refs或Jquery的旧本地方法来获取元素引用 将无状态组件更改为有状态组件只是为了使用REF,而不是任何生命周期方法都会被视为最佳实践吗 据我所知,将无状态组件转换为有状态组件时没

这个问题更倾向于执行的性能或最佳实践

根据React文档,refs是React16的一部分,只能在基于类(有状态)的组件中使用。由于无状态组件没有实例或状态,因此无状态组件中不能有引用

将无状态组件更改为有状态组件或基于类的组件以使用REF的权衡是什么?这是一种推荐的方法,或者如果只是关于refs,我们可以使用文档refs或Jquery的旧本地方法来获取元素引用


将无状态组件更改为有状态组件只是为了使用REF,而不是任何生命周期方法都会被视为最佳实践吗

据我所知,将无状态组件转换为有状态组件时没有真正的折衷,至少在性能方面是如此(以下概述了一些与此相关的发现)。尽管您可以使用
document.getElementId
或其他一些本机解决方案来检索DOM元素,但通常最好使用refs,因为它更符合React的处理方式(可以找到更详细的堆栈溢出响应和讨论此问题的线程

如果在触发某种类型的事件时使用refs获取对DOM元素的引用,还可以从事件本身检索DOM节点,而不使用任何refs

即使您将组件转换为基于类的组件,也没有什么强迫您实现生命周期挂钩。假设性能差异很小,如果您有一个明显的用例想要使用ref,那么将无状态功能组件转换为基于类的有状态组件是合适的,尽管在在大多数情况下,您可能不需要使用事件处理程序


如果您不想将功能组件转换为基于类的组件,还可以使用挂钩,这将允许您在功能组件中使用refs,而无需转换为基于类的组件(因为React16.8).

旁注:从React 16.8和挂钩的释放开始,您也可以拥有有状态的功能组件和参考