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 相关文章推荐
prototype 源码中文说明之 prototype.js
Sep 22 Javascript
Javascript中的var_dump函数实现代码
Sep 07 Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
Jun 24 Javascript
基于javascript实现页面加载loading效果
Sep 15 Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 Javascript
微信小程序开发之入门实例教程篇
Mar 07 Javascript
JavaScript实现图片无缝滚动效果
Jul 07 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
Jun 22 Javascript
webpack打包非模块化js的方法
Oct 24 Javascript
webpack 处理CSS资源的实现
Sep 27 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
晶体管单管来复再生式收音机
2021/03/02 无线电
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
php生成随机数的三种方法
2014/09/10 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
jquery indexOf使用方法
2013/08/19 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
python做反被爬保护的方法
2019/07/01 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
python实现电子书翻页小程序
2019/07/23 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
linux面试题参考答案(10)
2016/10/26 面试题
招聘单位介绍信
2014/01/14 职场文书
软件售后服务承诺书
2014/05/21 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
五年级下册复习计划
2015/01/19 职场文书
李白故里导游词
2015/02/12 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang