当前位置: 首页 > news >正文

react 中 component 和 pureComponent 区别是什么?

在 React 中,Component 和 PureComponent 的核心区别就在于 是否自动进行浅层比较 (shallow compare),从而决定组件是否需要重新渲染。

1. React.Component

Component 不会自动比较 props 或 state,只要父组件重新渲染(哪怕 props 没变),它也会执行 render()。

换句话说:

默认每次都重新渲染
除非你自己写 shouldComponentUpdate 去控制

class MyComponent extends React.Component {render() {console.log('Component render');return <div>{this.props.value}</div>;}
}

2. React.PureComponent

PureComponent 内部带了一个自动的:shouldComponentUpdate( nextProps, nextState )
并执行 浅层比较 (shallow equal):

  • props 没变(浅比较)

  • state 没变(浅比较)

就不会重新渲染
从而减少不必要的 render

示例:
class MyPureComponent extends React.PureComponent {render() {console.log('PureComponent render');return <div>{this.props.value}</div>;}
}

如果 props/state 没变,render() 不会执行。

浅比较(shallow compare)是什么意思?

对比的是引用是否相同,不是内容是否相同。

例如:

{ a: 1 } === { a: 1 }  // false(引用不同)

所以:

  • 如果 props 是基本类型(number、string、boolean):效果很好

  • 如果 props 是对象、数组,且你用 mutable 修改方式,引用不变 → PureComponent 会认为没变 → 不会更新(BUG)

Component 与 PureComponent 的对比总结

特性 Component PureComponent
是否自动比较 props/state ❌ 否 ✅ 是(浅比较)
是否减少无效渲染 ❌ 否 ✅ 是
是否容易踩坑 👍 稳定 ⚠️ 如果 props 是对象/数组容易误判
常见用途 默认所有组件 性能优化、UI 展示型组件

什么时候用 PureComponent?

  • props/state 基本类型

  • props/state 是不可变数据(使用 immutable 或通过扩展符结构拷贝)

例如:

this.setState({ list: [...this.state.list, newItem] })

什么时候不要用 PureComponent?

当 props 或 state 经常是:

  • 嵌套对象

  • 嵌套数组

  • 引用不变但内容变了

例如:

this.state.obj.a = 1;  // 引用没变
this.setState({ obj: this.state.obj }); // PureComponent 判断不出变化

会导致界面不更新。

总结

Component:默认每次都更新
PureComponent:自动浅比较,不变就不更新(性能优化)

想要性能更好、避免重复渲染 → 用 PureComponent
但要注意:一定要保持 props/state 的不可变性

http://www.zskr.cn/news/53800.html

相关文章:

  • 2025年电子站牌品牌综合实力排行榜:江苏兰太智能装备领跑行业
  • 2025年口碑好的在线硬度计热门厂家推荐榜单
  • 第5章 生成式AI项目的管理新挑战
  • 2025 软著申请公司最新推荐榜:国际协会权威测评认证,全流程高效代办 + 政策精准把控优质机构合集计算机软著申请/企业软著申请/个人软著申请/软著申请代办公司推荐
  • UE4+C++构建-(五十三)UE4工程中引入第三方C++的.DLL第12篇-模块规则材料(.Build.cs)-第6篇-将第三方预编译库文件(.lib)添加到当前模块的公共链接库列表中
  • 2025 最新推荐智能分选设备厂家排行榜:覆盖 260 + 材质识别 国际测评认证 再生资源 / 固废处理优选绿色分拣中心/可回收物/生活垃圾塑料薄膜智能分选设备公司推荐
  • linux c文件复制
  • 实现一种超轻量级的有线表格识别方法(有代码,可部署)
  • 渗透测试
  • 2025 最新推荐飞达剥标机优质厂家口碑榜:进口零件 + 全链条服务,前推式飞达剥标机/后撤式飞达剥标机/片料式飞达剥标机/飞达剥标机供料器公司推荐
  • DataGrip2025.2.4 11月最新版 安装、授权、使用说明
  • 2025年比较好的网红小火车厂家最新TOP实力排行
  • 2025年评价高的景区轨道观光小火车热门厂家推荐榜单
  • 2025年评价高的成都活动房厕所市场热度榜
  • 2025年靠谱的液压油滤油机厂家最新TOP实力排行
  • 2025年比较好的mvr蒸发器厂家最新实力排行
  • 2025年口碑好的工业废水蒸发器TOP实力厂家推荐榜
  • 2025年靠谱的系泊缆绳厂家实力及用户口碑排行榜
  • 2025年评价高的船用绳缆TOP品牌厂家排行榜
  • 2025年热门的船用绳缆厂家最新推荐权威榜
  • 2025年质量好的精密部件视觉点数包装机最新TOP品牌厂家排行
  • 2025年评价高的管道加热带厂家推荐及选购指南
  • 【GitHub每日速递 20251119】免费开源全学段数学教材,打破教育资源获取壁垒!附文件合并及下载攻略
  • 2025年质量好的港口浮吊厂家推荐及选择指南
  • 2025年靠谱的金蝶软件服务力排行榜
  • 2025年靠谱的财务软件管理商用系统优选榜
  • 2025年知名的杭州服务业财务软件高性价比榜单
  • linux crontab 任务
  • linux cpu调度
  • 应用安全 --- 代码块保护