component和 purecomponent

本文探讨了React中组件的优化技巧,特别是PureComponent的使用,它可以避免不必要的渲染,提高应用性能。通过对比Component,解释了PureComponent的工作原理及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

componet

是 react的组件对象,这个对象有一些自己的内置属性和方法:例如componentWillMount 这种,我们一般用的时候,就是重写这个函数。

class App extends React.Component  //写组件时候,就是继承这个对象.

PureComponent

React15.3中新加了一个 PureComponent 类,只要把继承类从 Component 换成 PureComponent 即可,可以减少不必要的 render操作的次数从而提高性能.

但是PureComponent 不能重写 shouldComponentUpdate函数。

<CommentItem likeComment={this.likeComment} userID={user.id} />
class CommentItem extends PureComponent {
  ...
  handleLike() {
    this.props.likeComment(this.props.userID)
  }
  ...
}

原理:

当组件更新时,如果组件的 props 和 state 都没发生改变, render 方法就不会触发,省去 Virtual DOM
的生成和比对过程

### React 中 PureComponent Component 的区别 React 提供了两种主要的组件基类:`React.Component` `React.PureComponent`。两者的功能相似,但在某些方面存在显著差异。 #### 1. **默认行为** - `React.Component` 不提供任何内置的优化机制。每次父组件重新渲染或者组件接收到新的 props 或 state 时,都会触发子组件的重新渲染过程[^1]。 - `React.PureComponent` 则实现了 `shouldComponentUpdate` 方法,默认会对当前组件的 props state 进行浅比较 (shallow comparison),如果两者均未发生变化,则跳过更新流程[^2]。 #### 2. **性能影响** 由于 `React.PureComponent` 实现了浅比较逻辑,它可以有效减少不必要的重渲染操作,从而提升应用的整体性能[^3]。然而需要注意的是,这种优化仅适用于简单的数据结构(如基本类型或扁平对象)。对于复杂嵌套的对象或数组,浅比较可能无法检测到深层次的变化,因此可能导致意外的行为。 #### 3. **使用场景** - 当组件的状态属性变化频繁且较为简单时,推荐使用 `React.PureComponent` 来获得更好的性能表现[^2]。 - 如果组件涉及复杂的计算逻辑或是其状态/props 包含深层嵌套的数据结构,则应谨慎选用 `React.PureComponent`,因为此时它可能会遗漏实际存在的变更。 #### 示例代码 以下是两个版本组件定义的例子: ```javascript // 使用 React.Component 定义的组件 class MyComponent extends React.Component { render() { console.log('Rendering...'); return <div>{this.props.value}</div>; } } // 使用 React.PureComponent 定义的组件 class MyPureComponent extends React.PureComponent { render() { console.log('Rendering Pure Component...'); return <div>{this.props.value}</div>; } } ``` 当传入相同的 prop 值给这两个组件实例时,只有后者会阻止多余的渲染动作发生[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值