深入了解React组件重新渲染的条件和生命周期
React组件rerender的真正条件
当前组件的State中的属性改变时且当前组件的shouldcomponentupdate返回true,那么当前组件会rerender
组件的props中的任一属性的值有变化(即使这个任一属性的值是对象,变化的仅仅是该对象中的某属性的值,此刻也算props发生了变化)且当前组件的shouldcomponentupdate return true时且当期组件所有父级以上组件的shouldcomponentupdate return true,当前组件才会re-render
当前组件的shouldcomponentupdate即使返回false,当前组件里子组件若满足1中的条件,这个子组件依然会重新渲染
各个生命周期的深层含义
shouldComponentUpdate
触发时机1:
when new props(当props中某属性的值为对象时,该对象中某属性值发生了变化,也会触发该函数的调用) are being received且所有父级组件的shouldComponentUpdate得返回true当前组件才会触发该回调
触发时机2:
即使所有父级组件的shouldComponentUpdate返回false,当前组件的state有变化,当前组件的该回调依然会触发
默认值
Defaults to true. This method is not called for the initial render or when forceUpdate() is used
其他情况
if shouldComponentUpdate() returns false, then componentWillUpdate(), render(), and componentDidUpdate() will not be invoked
componentWillReceiveProps
触发时机1:
当当前组件的props某属性有变化时(包括这种情况:当props中某属性的值为对象时,该对象中某属性值发生了变化)且所有父级以上组件的shouldComponentUpdate返回true(当前组件的shouldComponentUpdate是否返回true不重要)时当前组件的该回调才会触发调用
触发时机2:
即使当前组件的shouldComponentUpdate return false且当前组件没有props的更新,父级组件re-render了,当前组件该函数还是会触发调用
组件第一次渲染完成:mounting
mouting含义
whenever the Clock is rendered to the DOM for the first time. This is called "mounting" in React
在组件内相应回调函数叫componentDidMount() componentWillMount
组件被销毁时:Unmounting
whenever the DOM produced by the Clock is removed. This is called "unmounting" in React
在组件内相应回调函数叫componentWillUnmount()
组件正在被重新渲染: Updating
在组件内相应回调函数叫componentWillUpdate componentDidUpdate
深入了解React组件重新渲染的条件和生命周期的更多相关文章
- React之状态(state)与生命周期
		
很多时候,我们的页面数据是动态的.所以,我们需要实时渲染页面: 一.用定时函数setInterval() 组件(输出当前时间): index.js: 这样每隔1秒页面就会重新渲染一次,这样传进去的时间 ...
 - React躬行记(4)——生命周期
		
组件的生命周期(Life Cycle)包含三个阶段:挂载(Mounting).更新(Updating)和卸载(Unmounting),在每个阶段都会有相应的回调方法(也叫钩子)可供选择,从而能更好的控 ...
 - Vue.js 子组件的异步加载及其生命周期控制
		
前端开发社区的繁荣,造就了很多优秀的基于 MVVM 设计模式的框架,而组件化开发思想也越来越深入人心.这其中不得不提到 Vue.js 这个专注于 VM 层的框架. 本文主要对 Vue.js 组件化开发 ...
 - [Vuejs] 组件 v-if 和 v-show 切换时生命周期钩子的执行
		
v-if 初始渲染 初始值为 false 组件不会渲染,生命周期钩子不会执行,v-if 的渲染是惰性的. 初始值为 true 时,组件会进行渲染,并依次执行 beforeCreate,created, ...
 - drf框架概况-resful接口规范-请求模块-渲染模块-Postman-drf请求生命周期
		
drf框架 全称:django-rest- framework 知识点: """ 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码-基于restful ...
 - 前端组件化Polymer入门教程(5)——生命周期
		
以前我对生命周期这个概念还真不是很清楚,不过想想也简单,比如说人的生命周期,无非就是生老病死.而对于程序的生命周期就是说,它在每个阶段都会做不同的事,再比如说回调函数把,ajax返回的时候它才执行,那 ...
 - 第三章 四大组件之Activity(一)生命周期
		
1.生命周期: onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy() 2.各种状况下Ac ...
 - 【React】学习笔记(二)——组件的生命周期、React脚手架使用
		
原教程视频:ttps://www.bilibili.com/video/BV1wy4y1D7JT?p=2&spm_id_from=pageDriver 目录 一.组件的生命周期 1.1.生命周 ...
 - 22.1 、react生命周期(一)
		
在每个react组件中都有以下几个生命周期方法~我们需要在不同阶段进行讨论 组件生命周期概述 1.初始化 在组件初始化阶段会执行 constructor static getDerivedStateF ...
 
随机推荐
- C#——面对对象之封装、继承、多态的简单理解
			
一.封装 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 简单来多,就是讲我们所需要的代码打包封装进入一个类里面,便于我们调用,操作.这就是封装. 这样就隔离了具体 ...
 - web前端学习基础知识(1)
			
下载Atom插件和主题安装和配置 1.官网 https://atom.io/ 2.百度网盘上http://pan.baidu.com/s/1ntszCgT 安装subline以及插件的安装,再去了解它 ...
 - Python笔记6----数组
			
1.Python 中的数组 形式: 用list和tuple等数据结构表示数组 一维数组:list=[1,2,3,4] 二维数组:list=[[1,2,3],[4,5,6],[7,8,9]] 用arra ...
 - JavaScript学习笔记(第一天)
			
javascript个人笔记 JavaScript的组成 JavaScript是一种运行在客户端的脚本语言  ECMAScript 标准----js的基本的语法 DOM------Document ...
 - ROPI下载安装
			
ROPI下载安装 官方地址 参考文献 安装过程 wget http://num.math.uni-goettingen.de/~m.goerigk/ropi/0.1.0/ropi-0.1.0.tar. ...
 - HTML5学习(一)
			
HTML5学习 HTML5的基本结构 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content ...
 - 《你又怎么了我错了行了吧》【Alpha】Scrum meeting 1
			
第一天 日期:2019/6/14 前言: 第1次会议在9C-405召开 4个人讨论了整体代码的框架.布局.找出需要改进的地方重点讨论.明确编码的具体分工,每个人搭建好环境. 1.1 今日完成任务情况以 ...
 - matlab经验总结(转)
			
Matlab使用的一点儿体会(For Beginner) 作者:Genial(山城棒棒儿军) 转自 不明 真正接触matlab一年左右,我很喜欢上了matlab的简单的语法,易于绘制图形,gui ...
 - weblogic11g 密码忘记肿么办?
			
今天小编在用 weblogic 时,把密码忘记了,肿么办呢!很是着急,还不想重新建空间.那就跟我做下面的操作吧! %DOMAIN_HOME%为你 weblogic base_domain 安装目录:我 ...
 - 学习redis遇到的问题
			
1. pipeline为什么批量执行速度会变快? 答:是因为在tcp连接中减少了交互往返的时间,因为每次执行还要返回响应值,并且是一条执行完成之后才会执行下一条,但是批量执行只需要一次往返,所以节省了 ...