Reactjs 反应组分或反应纯组分
我不熟悉React,我想知道什么时候应该使用React组件,什么时候应该使用React PureComponent 组件:Reactjs 反应组分或反应纯组分,reactjs,Reactjs,我不熟悉React,我想知道什么时候应该使用React组件,什么时候应该使用React PureComponent 组件: import React, { Component } from 'react' import React, { PureComponent } from 'react' PureComponent: import React, { Component } from 'react' import React, { PureComponent } from 'react
import React, { Component } from 'react'
import React, { PureComponent } from 'react'
PureComponent:
import React, { Component } from 'react'
import React, { PureComponent } from 'react'
我可以在任何地方使用React PureComponent吗
或
使用shouldComponentUpdate并检查并返回不需要的false是否安全
我刚刚读到一篇文章,说使用纯组件实际上弊大于利。他们建议使用“更改时进行反应更新”。这有多真实
第条:
我可以在任何地方使用React PureComponent吗
是的,您可以,但是越来越多地尝试使用功能组件。在类组件的情况下,如果您想实现自己的shouldComponentUpdate,请将其保持较小并扩展到PureComponent或component,建议在最小的非复杂(嵌套深度数组或/和对象)道具上更改组件需要更新时执行
使用shouldComponentUpdate安全吗
是的,如果您知道自己在做什么,这意味着实现中的任何缺陷都可能导致性能问题,例如不必要的组件重新渲染,因为您的shouldComponentUpdate实现返回true或更糟,当您的shouldComponentUpdate由于某些故障返回false时,您的组件不会在某些道具上重新加载
被引用的媒体帖子试图出售react update if changed软件包,这似乎是一个不错的选择,但当你意识到这一点时
真正的问题在于性能优化(请参阅)
如何避免不必要的检查以确定组件是否可以更新并避免不必要的重新提交
- 将道具传递给组件,您知道组件需要这些道具,并且将要更改这些道具
- 在这种情况下,如果有多个道具被发送到组件,并且很少有限的道具发生变化,那么组件需要更新并重新渲染,那么您可以很好地实现您自己的shouldComponentUpdate(请参阅上述react优化共享链接中的示例)。但是要小心那些数组和对象的道具,因为区分它们是一件痛苦的事情,尤其是那些深而笨重的嵌套道具
- 为您的UI使用a,而为它的表示逻辑(显示隐藏、排序等)将出现在一个组件中,该组件将是一个;通过链接逻辑和UI组件
- 在尝试在祖先和后代之间传递道具时,请务必使用,特别是如果道具的级别超出了从父组件到子组件的级别
PureComponent check shallow comparison and re-render when Needed
Use Pure Component when used when primitive data types int string boolean etc,
注意:-
- PureComponent没有任何生命周期方法
- React PureComponent的shouldcomponentupdate()仅粗略地比较对象
React.PureComponent
实现了shouldComponentUpdate
,并进行了简单的属性和状态比较。这是一个优化工具,你可以使用,如果你真的需要它<代码>如果您的React组件的render()函数在相同的道具和状态下呈现相同的结果,您可以在某些情况下使用React.PureComponent来提高性能。@Thole是PureComponents有害的吗?不一定有害,但可能会引入细微的错误。我个人只会在我的应用程序中有特定情况需要时使用PureComponent
,默认情况下不使用它。@Thole我认为最好使容器组件具有PureComponents,而不是低级组件,因为如果道具和状态没有更改,那么低级组件无论如何也无法访问。如果您还没有更改,请阅读React性能。如果你小心处理数据,React在几乎所有情况下都已经很快了,你几乎永远不需要React.PureComponent。谢谢你的详细回答。是的,当然,毕竟这确实是一个非常重要的问题,为什么不呢。