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 相关文章推荐
MooTools 1.2介绍
Sep 14 Javascript
javaScript同意等待代码实现心得
Jan 01 Javascript
jQuery ajax 路由和过滤器使用说明
Aug 02 Javascript
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
让图片旋转任意角度及JQuery插件使用介绍
Mar 20 Javascript
jQuery异步加载数据并添加事件示例
Aug 24 Javascript
微信小程序实现滑动删除效果
May 19 Javascript
前端axios下载excel文件(二进制)的处理方法
Jul 31 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
Sep 06 Javascript
vue实现在线翻译功能
Sep 27 Javascript
jQuery实现聊天对话框
Feb 08 jQuery
ant design 日期格式化的实现
Oct 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
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
jquery text()要注意啦
2009/10/30 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
详解python的数字类型变量与其方法
2016/11/20 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
大学生职业生涯规划书前言
2014/01/09 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
使用CSS实现音波加载效果
2023/05/07 HTML / CSS