一、pureComponent的理解

   pureComponent表示一个纯组件,可以用来优化react程序。减少render函数渲染的次数。提高性能

  pureComponent进行的是浅比较,也就是说如果是引用数据类型的数据,只会比较不是同一个地址,而不会比较这个地址里面的数据是否一致

  浅比较会忽略属性和或状态突变情况,其实也就是数据引用指针没有变化,而数据发生改变的时候render是不会执行的。如果我们需要重新渲染那么就需要重新开辟空间引用数据

  好处:

  当组件更新时,如果组件的props或者state都没有改变,render函数就不会触发。省去虚拟DOM的生成和对比过程,达到提升性能的目的。具体原因是因为react自动帮我们做了一层浅比较

二、例子

import React, { PureComponent } from "react";

export default class List extends PureComponent{
constructor(){
super();
this.state = {
userInfo:"李四",
arr:[]
}
this.handleAdd = this.handleAdd.bind(this);
this.handleModify = this.handleModify.bind(this);
}
render(){
let {userInfo,arr} = this.state;
return (
<div>
<h3>{userInfo}</h3>
<ul>
{
arr.map((item,index)=>(
<li>{item}</li>
))
}
</ul>
<button onClick={this.handleAdd}>添加</button>
<button onClick={this.handleModify}>修改</button>
</div>
)
}
handleAdd(){
//render函数不会执行 因为newArr还是引用这arr的地址 地址没有发生改变
let newArr = this.state.arr;
newArr.push("姓名");
this.setState({
arr:newArr
})
}
handleModify(){
//会执行 因为会做浅比较
this.setState({
userInfo:"张三"
})
}
}

 

三、使用场景

    1、PureComponent一般会用在一些纯展示组件上。切结props和state不能使用同一个引用

   2、在通过PureComponent进行组件的创建的时候不能够在写shouldComponentUpdate. 否则会引发警告

最新文章

  1. Spring 4 使用Freemarker模板发送邮件&amp;添加附件
  2. 代理延迟加载中proxy和弄no-proxy区别
  3. gslX680驱动的移植实践
  4. XE3随笔15:使用 IXMLHTTPRequest 简单获取网页源代码
  5. 《与mysql零距离接触》视屏学习笔记
  6. LINUX运维实战案例之文件已删除但空间不释放问题的分析与解决办法
  7. linux下svn命令大全
  8. MyEclipse取消验证Js的两种方法
  9. Java多线程之新类库中的构件CyclicBarrier
  10. linux vim 常用命令
  11. Google Earth影像数据破解之旅
  12. poj2785双向搜索
  13. 饮冰三年-人工智能-Python-30 python开发中常见的错误
  14. 重构客户注册-基于ActiveMQ实现短信验证码生产者
  15. 下面哪些是无效的Java标识?为什么?
  16. Down Payment 和 Deposit的差异
  17. js面向对象插件的做法框架new goBuy(&#39;.cakeItem&#39;,{ add:&#39;.add&#39;, reduce:&#39;.reduce&#39; },[1,0.7,0.6]);
  18. ARM JTAG 信号 RTCK 应该如何处理?
  19. sql 存储过程导出指定数据到.txt文件(定时)
  20. 求好用的在线手册编写工具,能编写像bootstrap在线Doc那种的,想为OpenCenter写个在线手册

热门文章

  1. 【OpenCV学习】计算两幅图像的重叠区域
  2. WIN10平板 如何设置不允许切换竖屏
  3. C# System.Collections.Queue
  4. 深入理解JS执行细节(写的很精辟)
  5. Ubuntu 下搭建 Android 开发环境(图文)
  6. [Aaronyang] 写给自己的WPF4.5 笔记10[层次数据需求处理,TreeView绿色文章1/4]
  7. 多进程vs多线程
  8. 虚拟机centos 7联网设置之NAT方式
  9. visio2013激活软件
  10. Mac安装crfpp