React的生命周期

 

生命周期分为三个阶段

 

1.mounted(初始化的时候)

当我们看见页面元素从JSX变成了DOM节点时,React组件已经被载入(mounted)到页面中了

 

2.update(组件在运行中如果发生状态和属性改变时)

当React组件中的数据发生改变时,需要重新渲染页面(重新更新页面元素的时候,例如获取本次的数据和上次数据不一样,需要重新更新页面数据),这时需要将React组件重新渲染一次

 

3.unmount(组件卸载和销毁状态)

当组件需要从页面中废弃和销毁时,就需要将React组件从页面中删除

 

React对这三个不同阶段的状态定义了不同的事件去监听状态


 

钩子函数

当程序中某些状态只要发生改变,程序立马去通知对应的处理函数去处理,这个函数就是钩子函数


 

React在这三个状态中封装了哪些钩子函数?

 

mounted状态中的函数(初始化时候的钩子函数)

1.getDefaultProps()

设置组件内部属性(一般用于设置组件内部的常量),比如,请求一个ajax,请求的url就可以设置成内部属性,因为url是不变的。返回对象

2.getInitialState()

设置组件内部的状态。返回对象

3.componentWillMount()

组件即将加载时,在这时可以获取ajax数据,并解析。

4.render()

默认。返回JSX

5.componentDidMount()

组件加载完毕时,挂载的状态。比如: 
1.想得到渲染后的真实的DOM节点 
2.调用第三方插件

以上五个钩子函数按照序号的顺序执行,示例代码如下:

 var Compo = React.createClass({
getDefaultProps:function(){
console.log("1 get props")
return {}
},
getInitialState:function(){
console.log("2 get state")
return {}
},
componentWillMount:function(){
console.log("3 will mount")
},
render:function(){
console.log("4 render")
return(
<div>
This is render!
</div>
)
},
componentDidMount:function(){
console.log("5 did mount");
}
})
ReactDOM.render(<Compo/>,document.getElementById("example"));

运行结果如图: 
点击查看

易错:render只负责渲染,每次数据刷新都调用render函数


 

update状态中的函数(运行中的钩子函数)

1.componentWillReceiveProps(nextProps) 
当组件接收到新的props时,调用此函数,然后修改当前的props

2.shouldComponentUpdate(nextProps,nextState) 
给开发者一个权限,在收到新的props和state时,是否调用render渲染,可以写入一些逻辑,控制数据的更新。返回Boolean

3.componentWillUpdate(nextProps,nextState) 
在组件重新渲染之前执行,在渲染之前最后的props和state都发生了改变,这个函数使用很少,一般用在日志和记录的打印

4.componentDidUpdate() 
当组件重新渲染完毕后调用

 

组件运行中生命周期函数被触发的条件:

1.当父组件修改子组件的属性props时 
2.当组件自身修改状态state时


 

Unmount状态中的函数(卸载时的钩子函数)

componentWillUnmount() 
在组件即将被卸载时调用,这个函数几乎不会使用到,因为浏览器本身具有垃圾回收机制


 

总结

 

在开发中很少使用React全部的生命周期钩子函数

React学习笔记3的更多相关文章

  1. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  2. React学习笔记--程序调试

    React学习笔记 二 程序调试   前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...

  3. React学习笔记(一)- 入门笔记

    React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...

  4. React学习笔记(七)条件渲染

    React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...

  5. React学习笔记(六)事件处理

    React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...

  6. React学习笔记(五)State&声明周期

    React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...

  7. React学习笔记 - 组件&Props

    React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...

  8. React学习笔记 - 元素渲染

    React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...

  9. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

  10. React学习笔记 - Hello World

    React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...

随机推荐

  1. java随机数组

    import java.util.Random; public class Ccore { public static void main(String[] args) { for(int i=1;i ...

  2. .net 连接ORACLE中文显示乱码解决方案

    FYI由于历史的原因,早期的oracle没有中文字符集(如oracle6.oracle7.oracle7.1),但有的用户从那时起就使用数据库了, 并用US7ASCII字符集存储了中文,或是有的用户在 ...

  3. MYCAT实战之分片迁移

    实践扩容 1.要求: travelrecord 表定义为10个分片,尝试将10个分片中的 2 个分片转移到第二台MySQL上, 并完成记录要求,最快的数据迁移做法,中断业务时间最短 2.针对分片以及迁 ...

  4. ubuntu12 安装redis和phpRedisAdmin详细流程

    一.Ubuntu安装redis(redis默认端口6379) 方式一.直接下载源码,编译(redis可以编译源码之后直接运行,不需要安装) 1.1执行命令,从官网下载源码编译: $ wget http ...

  5. 在linux中获取错误返回信息&nbsp;&amp;…

    #include // void perror(const char *msg); #include // char *strerror(int errnum); #include //errno e ...

  6. Python常用算法

    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...

  7. 201671010140. 2016-2017-2 《Java程序设计》java学习第三周

    java学习第三周       不知不觉,学习java已经是第三周了,不同于初见时的无措,慌张,在接触一段时日后,渐渐熟悉了一些,了解到了它的便利之处,也体会到了它的一些难点,本周主攻第四章,< ...

  8. copyWithZone详解

    [copyWithZone详解] NSObject实现了-copy.+copy.+copyWithZone方法.代码如下: + (id)copy { return (id)self; } + (id) ...

  9. Express的路由详解

    Express的路由详解 http://www.jb51.net/article/76203.htm

  10. Resin 的watchdog(看门狗)介绍和resin负载均衡实现

    为了稳定和安全,Resin使用一个独立的watchdog进程来启动和监视Resin服务器.watchdog连续你检测Resin服务器的状态,如果其没有反应或者迟钝,将会重启Resin服务器进程.大多数 ...