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 相关文章推荐
Javascript无阻塞加载具体方式
Jun 28 Javascript
JS下拉缓冲菜单示例代码
Aug 30 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
AngularJs  E2E Testing 详解
Sep 02 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
H5移动端适配 Flexible方案
Oct 24 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 Javascript
layui弹出层按钮提交iframe表单的方法
Aug 20 Javascript
在vue项目中引入vue-beauty操作方法
Feb 11 Javascript
JS中FormData类实现文件上传
Mar 27 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
JS如何在不同平台实现多语言方式
Jul 16 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数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python读取文件名称生成list的方法
2018/04/27 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
工业学校毕业生自荐书
2014/01/03 职场文书
简历的自我评价范文
2014/02/04 职场文书
代理协议书
2014/04/22 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
小学教师个人总结
2015/02/05 职场文书
教你如何用cmd快速登录服务器
2022/06/10 Servers