从React v15.3.0知道,我们有了一个名为PureComponent的新基类,以扩展内置的PureRenderMixin。我了解的是,在幕后,它对内部的道具进行了浅浅的比较shouldComponentUpdate
。
现在,我们有3种方法来定义React组件:
- 功能性无状态组件,不扩展任何类
- 扩展
PureComponent
类的组件 - 扩展
Component
类的常规组件
一段时间以前,我们曾经将无状态组件称为“纯组件”,甚至称为“哑组件”。似乎“纯”一词的整个定义现在已经在React中改变了。
尽管我了解这三者之间的基本区别,但是我仍然不确定何时选择什么。另外,每种性能对性能的影响和权衡如何?
更新:
这些是我希望得到澄清的问题:
- 我应该选择将简单的组件定义为功能性的(出于简化的目的)还是扩展
PureComponent
类的(出于性能的考虑)? - 我为失去的简单性而获得了真正的性能提升吗?
Component
当我总是可以使用PureComponent
以获得更好的性能时,是否需要扩展常规类?
React.Component
是默认的“常规”组件。您可以使用class
关键字和声明它们extends React.Component
。将它们视为具有生命周期方法,事件处理程序以及任何方法的类。React.PureComponent
是React.Component
实现shouldComponentUpdate()
与做它的一个比较浅的功能props
和state
。你必须使用forceUpdate()
,如果你知道组件有道具或状态嵌套数据更改,您希望重新呈现。因此,如果当您作为道具传递或设置为状态的数组或对象发生变化时需要重新渲染组件,则它们并不是很好。功能组件是没有生命周期功能的组件。它们据说是无状态的,但是它们是如此的干净整洁,以至于我们现在有了钩子(从React 16.8起),因此您仍然可以有一个状态。所以我想它们只是“干净的组件”。