1

这个问题更多地与实施的绩效或最佳实践相一致。

根据 React Docs,作为 React16 一部分的 ref 只能用于基于类(有状态)的组件中。由于无状态组件没有实例或状态,我们不能在无状态组件中拥有 ref。

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

将无状态组件更改为有状态组件是否仅用于使用 refs 而不是任何生命周期方法被视为最佳实践?

4

1 回答 1

1

据我所知,在将无状态组件转换为有状态组件时,至少在性能方面没有真正的权衡(下面的文章概述了与此相关的一些发现)。尽管您可以通过 using 或其他本机解决方案继续检索 DOM 元素document.getElementId,但通常使用 refs 更好,因为它更符合 React 的做事方式(更详细的 Stack Overflow 响应和讨论此问题的线程,您可以在此处找到.

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

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

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

于 2019-09-14T10:14:58.617 回答