React组件生命周期详解


Posted in Javascript onJuly 03, 2017

React组件生命周期详解

调用流程可以参看上图。

React组件提供了生命周期的钩子函数去响应组件不同时刻的状态,组件的生命周期如下:

  1. 实例化
  2. 存在期
  3. 销毁期

实例化

首次调用组件时,有以下方法会被调用(注意顺序,从上到下先后执行):

getDefaultProps

这个方法是用来设置组件默认的props,组件生命周期只会调用一次。但是只适合react.createClass直接创建的组件,使用ES6/ES7创建的这个方法不可使用,ES6/ES7可以使用下面方式:

//es7
class Component {
 static defaultProps = {}
}
//或者也可以在外面定义es6
//Compnent.defaultProps

getInitialState

设置state初始值,在这个方法中你已经可以访问到this.props。getDefaultProps只适合React.createClass使用。使用ES6初始化state方法如下:

class Component extends React.Component{
 constructor(){
 this.state = {
  render: true,
 }
 }

componentWillMount

改方法会在组件首次渲染之前调用,这个是在render方法调用前可修改state的最后一次机会。这个方法很少用到。

render

这个方法以后大家都应该会很熟悉,JSX通过这里,解析成对应的虚拟DOM,渲染成最终效果。格式大致如下:

class Component extends React.Component{
 render(){
 return (
  <div></div>
 )
 }

componentDidMount

这个方法在首次真实的DOM渲染后调用(仅此一次)当我们需要访问真实的DOM时,这个方法就经常用到。如何访问真实的DOM这里就不想说了。当我们需要请求外部接口数据,一般都在这里处理。

存在期

实例化后,当props或者state发生变化时,下面方法依次被调用:

componentWillReceiveProps

每当我们通过父组件更新子组件props时(这个也是唯一途径),这个方法就会被调用。

componentWillReceiveProps(nextProps){}

shouldComponentUpdate

字面意思,是否应该更新组件,默认返回true。当返回false时,后期函数就不会调用,组件不会在次渲染。

shouldComponentUpdate(nextProps,nextState){}

componentWillUpdate

字面意思组件将会更新,props和state改变后必调用。

render

跟实例化时的render一样,不多说

componentDidUpdate

这个方法在更新真实的DOM成功后调用,当我们需要访问真实的DOM时,这个方法就也经常用到。

销毁期

销毁阶段,只有一个函数被调用:

componentWillUnmount

每当组件使用完成,这个组件就必须从DOM中销毁,此时该方法就会被调用。当我们在组件中使用了setInterval,那我们就需要在这个方法中调用clearTimeout。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS[Desktop]实现图标换行示例代码
Nov 17 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
Sep 09 Javascript
js propertychange和oninput事件
Sep 28 Javascript
javascript使用prototype完成单继承
Dec 24 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
H5移动端适配 Flexible方案
Oct 24 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
JS 组件系列之BootstrapTable的treegrid功能
Jun 16 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
解析Vue.js中的组件
Feb 02 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
利用Vue.js实现求职在线之职位查询功能
Jul 03 #Javascript
Swiper实现轮播图效果
Jul 03 #Javascript
jQuery实现点击关注和取消功能
Jul 03 #jQuery
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
Jul 03 #Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
Jan 27 #Javascript
Bootstrap按钮组实例详解
Jul 03 #Javascript
详解使用vue实现tab 切换操作
Jul 03 #Javascript
You might like
php中用foreach来操作数组的代码
2011/07/17 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
php生成与读取excel文件
2016/10/14 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
javascript实现延时显示提示框效果
2017/06/01 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
python选择排序算法的实现代码
2013/11/21 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
学习python需要有编程基础吗
2020/06/02 Python
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
个人简历中的自我评价怎么写
2014/01/26 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
三方协议书
2015/01/27 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年财政所工作总结
2015/04/25 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
教师节主持词开场白
2015/05/29 职场文书
MySQL学习必备条件查询数据
2022/03/25 MySQL