React学习笔记3
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时,调用此函数,然后修改当前的props2.shouldComponentUpdate(nextProps,nextState)
给开发者一个权限,在收到新的props和state时,是否调用render渲染,可以写入一些逻辑,控制数据的更新。返回Boolean3.componentWillUpdate(nextProps,nextState)
在组件重新渲染之前执行,在渲染之前最后的props和state都发生了改变,这个函数使用很少,一般用在日志和记录的打印4.componentDidUpdate()
当组件重新渲染完毕后调用
组件运行中生命周期函数被触发的条件:
1.当父组件修改子组件的属性props时
2.当组件自身修改状态state时
Unmount状态中的函数(卸载时的钩子函数)
componentWillUnmount()
在组件即将被卸载时调用,这个函数几乎不会使用到,因为浏览器本身具有垃圾回收机制
总结
在开发中很少使用React全部的生命周期钩子函数
React学习笔记3的更多相关文章
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
- React学习笔记(一)- 入门笔记
React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
- React学习笔记(六)事件处理
React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...
- React学习笔记(五)State&声明周期
React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
- React学习笔记 - Hello World
React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...
随机推荐
- mysql concat的使用
想要在一个id前都加个0,如果处理呢? mysql concat的使用 update `a_data` set id=CONCAT('0', id) where data_packet_id in ( ...
- GO数组和切片
数组Array 定义数组的格式:var <varName>[n]<type>,n>0 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型, 不同类型的不能相互赋值 ...
- HDOJ5877(dfs序+离散化+树状数组)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- VMware80端口映射
目标是外网访问80端口,然后映射到虚拟机的80端口,80映射到80. 1.首先80端口是最常用的端口,要确认主机80端口是否被占用,如果被占用,停止或者修改占用80端口程序. 2.80端口默认防火墙是 ...
- <正则吃饺子> :关于redis集群的搭建、集群测试、搭建中遇到的问题总结
项目中使用了redis ,对于其基本的使用,相对简单些,根据项目中已经提供的工具就可以实现基本的功能,但是只是这样的话,对于redis还是太肤浅,甚至刚开始时候,集群.多节点.主从是什么,他们之间是什 ...
- 华为部分真机调试无法显示log问题解决
真机测试时,部分华为手机无法获取全部的log信息.或者说无法获取Error以下级别的log信息.比如P7 这是因为部分华为机出厂默认log设置为关闭状态,因此只能获取Error以上级别的log信息.蛋 ...
- spring cloud微服务搭建(一)
martin fowler大神提出微服务的概念后,各种微服务的技术满天飞,现在用的比较多的是spring cloud和阿里的dubbo,由于dubbo 在16年10月份就停止更新了,不过好像前些天又更 ...
- 在C#中动态调用webService
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- java游戏制作之水果忍者
水果忍者的原理很简单,主要就是采用随机的方式是画面上面出现水果. package Fruitninja; import java.awt.Dimension; import java.awt.Grap ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第六章
java学习第六章 本周对与java中的接口,lambda表达式与内部类进行了学习,以下是我在学习中的一些体会: 1.接口: <1>.接口中的所有常量必须是public sta ...