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

React PureComponent 和 React.memo()区别

1 注意

● PureComponent和memo仅作为性能优化的方式存在
● 不要依赖它来阻止渲染,会产生BUG
● PureComponnet 和memo 都是通过对 props 值的浅比较来决定该组件是否需要更新的。

2 PureComponent 和React.memo() 区别

PureComponent 和React.memo()都是React优化组件性能的方式。

  1. PureComponent是一个类组件,它通过比较当前和之前的props和state值来检查是否需要重新渲染。如果state 和 props 没有发生变化,则组件不会重新渲染。在PureComponent内部,它实现了一个shouldComponentUpdate方法,用于判断组件是否需要更新。这个方法默认会对组件的state和props进行浅比较,如果没有变化,那么就会返回false,阻止重新渲染。
  2. React.memo()是一个高阶函数,它接受一个组件并且返回一个新的组件,它通过浅比较当前和之前的props值来判断是否应该重新渲染组件。它提供第二个参数来自定义比较逻辑,可以用在深层次比较上。如果props没有变化,则组件不会重新渲染。

3 用法

3.1 PureComponent

import React from './react';
import ReactDOM from './react-dom';
class Counter extends React.PureComponent{
}
ReactDOM.render(<Counter />, document.getElementById('root'));

3.2 React.memo()

import React from 'react';
import ReactDOM from 'react-dom';
function SubCounter(props){return <div>{props.count}</div>
}
let MemoSubCounter = React.memo(SubCounter);
console.log(MemoSubCounter);
class Counter extends React.Component{state = {number:0}inputRef = React.createRef();handleClick = (event)=>{let amount = Number(this.inputRef.current.value);this.setState({number:this.state.number+amount});}render(){console.log('Counter render');return (<div><p>{this.state.number}</p><input ref={this.inputRef}/><button onClick={this.handleClick}>+</button><MemoSubCounter count={this.state.number}/></div>)}
}
ReactDOM.render(
<Counter />
, document.getElementById('root'));

打印的memo
在这里插入图片描述

http://www.lryc.cn/news/307001.html

相关文章:

  • CentOS 7全系列免费
  • 【Spring连载】使用Spring Data访问 MongoDB----Aggregation Framework支持
  • 【深入理解设计模式】适配器设计模式
  • ASP.NET-实现图形验证码
  • 解决Maven爆红以及解决 Idea 卡在 Resolving问题
  • MySQL集群 双主架构(配置命令)
  • 网络安全之安全事件监测
  • 【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段
  • Web性能优化-详细讲解与实用方法-MDN文档学习笔记
  • 组态王连接施耐德M580PLC
  • pop链构造 [NISACTF 2022]babyserialize
  • 【VIP专属】Python应用案例——基于Keras, OpenCV和MobileNet口罩佩戴识别
  • Doris——荔枝微课统一实时数仓建设实践
  • Stable Diffusion 绘画入门教程(webui)-ControlNet(Inpaint)
  • LeetCode146: LRU缓存
  • 【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征
  • vue3中安装并使用CSS预处理器Sass的方法介绍
  • 过滤器(Filter)
  • AMRT3D数字孪生引擎详解
  • Sqlite数据库详解
  • 基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统
  • 【数据结构】B树,B+树,B*树
  • 常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好
  • 【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理
  • Pycharm一直打不开,无任何报错
  • 用html编写的小广告板
  • hive中如何取交集并集和差集
  • 2024.2.26
  • 【kubernetes】关于k8s集群的声明式管理资源
  • 8.openEuler操作系统网络管理和防火墙(二)