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 学习笔记二 字符串拼接
Mar 28 Javascript
asp.net 30分钟掌握无刷新 Repeater
Sep 16 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
Javascript 6里的4个新语法
Aug 25 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
Feb 05 Javascript
Angular移动端页面input无法输入的解决方法
Nov 14 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
vue中v-show和v-if的异同及v-show用法
Jun 06 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 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中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
JS中style属性
2006/10/11 Javascript
几个高效,简洁的字符处理函数
2007/04/12 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python计算auc指标实例
2017/07/13 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
Python字典对象实现原理详解
2019/07/01 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
函授教育个人学习的自我评价
2013/12/31 职场文书
爱岗敬业演讲稿范文
2014/01/14 职场文书
2014会计年终工作总结
2014/12/20 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
领导干部学习心得体会
2016/01/23 职场文书
终止合同协议书范本
2016/03/22 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript