我试图了解何时使用React pure组件以及何时使用 使用常规组件。 我有一个简单的问题。
在相同的道具和相同的状态下,组件如何呈现不同的结果?
如何定义道具对象浅层比较的界限? 我没有在道具中使用嵌套属性,但是我应该始终使用纯组件吗?
下面的引言说,当父母是纯孩子时,也不会重新渲染所有子孩子组件,我们理解并确保了这一点,但这是否还意味着我们必须将孩子包裹在纯孩子组件中,否则它们可以作为常规孩子组件使用吗?
此外,React.PureComponent的shouldComponentUpdate()会跳过整个组件子树的道具更新。确保所有子组件也都是“纯”的。
最后一句是……在官方文档中的以下引言意味着我们无法访问常规组件中的shouldComponentUpdate()?
React.Component没有实现shouldComponentUpdate(),但是React.PureComponent通过浅层的道具和状态比较来实现它。
答案 0 :(得分:0)
React中有两种主要类型的组件。类组件和功能组件。
类组件是ES6类,而功能组件是函数。
功能组件的唯一约束是接受props作为参数并返回有效的JSX。
您可以随意使用功能组件。但是,当您确实需要使用组件生命周期方法时,则需要将其重构为类级别的组件。
请看看这个link
答案 1 :(得分:0)
在相同的道具和相同的条件下,组件如何呈现不同的结果 状态,例如?
在相同的道具和相同的状态下(如果您未使用旧版上下文API),组件将不会呈现不同的结果。这就是使用PureComponent的原因,因为在给定相同的Props和Same状态的情况下,该组件无需经历另一个渲染周期,在该周期中它比较其props和state并最终决定不进行任何更改。这是计算的浪费,因此使用PureComponent可以通过在Props和State级别添加另一个比较来阻止这种比较。
如何定义道具对象浅层比较的界限?我没有 在props中使用了嵌套属性,但我应该始终使用pure 组件?
如果您的所有Props都是高度嵌套的,那么,如果在数据内未正确执行更新(未克隆和更改对象),则浅表比较可能会给您带来负面的负面印象。浅比较将对道具和状态执行一级检查。
您必须决定是否使用PureComponent
的点是基于对是否使用的理解,这种情况经常发生,从而触发了组件渲染方法,但无需进行任何更改。如果道具和状态频繁变化,并且仅在极少数情况下组件会使用相同的道具和状态进行渲染,则您无需使用PureComponent,因为这会增加道具和状态比较的额外复杂性,并且总是返回{{ 1}}进行更改。
使用不可变数据将有助于快速进行浅层比较检查,因为引用更改意味着值更改,而不可变数据可确保您不直接更改值。
这是否也意味着我们必须将孩子包装成纯组分或 它们可以用作常规组件
在创建PureComponent时,您需要确保的所有子项也都是Pure,并且如果嵌套的组件满足上述有关何时创建PureComponent的说明,那么您可以将它们编写为PureComponent本身。