2、react-生命周期1※※※
生命周期:
一个人的生命周期:从出生到去世
出生得那一刻就是当前这一个人特性固定下来得那一刻:实例化期
出生了之后生长知道死的那一刻:生存期
去世了:销毁期
所以对于一个组件来说它的生命周期是三个时期:实例化期、生存期和销毁期
实例化期和销毁期只能被执行一次,但是生存期会反复被调用执行
每一个时期都会调用不同的钩子函数来执行
1、组件生命周期:实例化期、生存期、销毁期
2、实例化期得话,先初始化属性和初始化状态
static defaultProps
constructor(){
this.state={}
}
componentWillMount:实例化之前调用得钩子函数
render:会返回一个虚拟DOM
componentDidMount:实例化之后会调用得钩子函数
实例化期中得每一个钩子函数只能被执行和调用一次,因为组件只能被初始化一次
3、生存期:只要是当前得组件实例化完成了,那么接下来所有得都是在生存期中完成得
什么时候组件才会执行生存期中得钩子函数呢?
只要是组件得属性或状态改变了那么生存期中得钩子函数就会被执行
componentWillReceiveProps:再接收父组件改变后得props,因为再改变props一般都是通过接收父组件得props得值从而改变子组件得props的值得
不管是props变化也好,还是state改变也好,都会触发一个钩子函数,这个钩子函数得作用是:判断是否让当前得组件进行更新得:shouldComponentUpdate,如果返回值是true得话,那么组件会更新,返回值是false组件不会更新(默认返回值是true)
再组件更新之前会调用得是componentWillUpdate
还会调用得是render这个钩子函数,返回一个虚拟得DOM结构
再组件更新之后会调用得钩子函数:componentDidUpdate
4、组件销毁:页面关了,组件就销毁了
5、不管是实例化期也好,还是生存期也好,在render这个方法之前都不会有真实DOM,render这个钩子函数调用完成之后才能把虚拟DOM转化成真实DOM呢,所以如果我们想要操作真实DOM得话就得在did这个方法中操作,不管是DidMount也好,还是DidUpdate也好都可以在这两个钩子函数得任意一个钩子函数中操作真实DOM
能不能放在WillUpdate中操作真实DOM,可以是可以但是不好,为什么可以?
因为在实例化期中又render这个方法,它已经把虚拟DOM转化成真实DOM了,所以可以找到这个真实DOM
但是最好不要在Will中加操作DOM得方法,因为在Will之后会调用得是DID中得方法,如果did中也有操作DOM得代码得话,那么就会把Will中得操作DOM得方法覆盖掉,所以我们在操作DOM得时候尽量得放在DidMount或DidUpdate中来完成
6、销毁期:组件从DOM中卸载了就自动销毁了
componentWillUnMount:组件销毁之前执行得钩子函数
组件在销毁得时候,先清除当前组件中得定时器或延迟器,然后清除当前组件中得事件监听,最后销毁当前得组件
7、组件得嵌套
涉及到子组件和父组件
实现网页布局:header、nav、content、footer
因为app是入口文件,所以直接再app这个入口文件中告诉它把所有得DOM都渲染到id为root得div中即可,其他得组件中就不需要写了
8、es6中我们讲到默认导出数据得话使用得是export default这个方法进行导出得,导入得话使用得是import导入得
现在我们这个页面再布局得时候里边又header、nav、content、footer这四个组件,组件话开发可以很好得达到组件得复用,哪个页面中使用,就直接再哪个页面中引入即可,不需要重新写这个组件了
9、那么对于当前得页面来说
Hello这个组件是父组件
其他得四个组件是子组件
如果存在子组件得话,那么生命周期得执行顺序是:
实例化期:先调用父组件中得componentWillMount,然后是子组件中得WillMount,子组件中得DidMount,父组件中得DidMount
生存期:
只重新渲染子组件:直接给子组件绑定事件改变state状态值,那么直接调用得是子组件中得生存期得钩子函数,父组件中生存期得钩子函数不会被调用
当重新渲染父组件得话,那么子组件也会被重新渲染,所以父组件得钩子函数和子组件得钩子函数会同时被调用
10、生命周期:
就是一个组件从显示到销毁得过程
组件来说它得生命周期分为三个时期:实例化期,生存期和销毁期
每一个时期都会调用不同得钩子函数,如果先要再不同得时期完成某些操作就是再这些钩子函数中完成得
再实例化期:
初始化属性static defaultProps和状态constructor(){this.state}进行初始化
之前:componentWillMount,再这个钩子函数中我们一般不会做任何操作,因为虚拟DOM和真实DOM都没有
render:会返回一个虚拟DOM
componentDidMount:DOM已经渲染在页面中了,已经是真实得DOM了,所以如果需要操作当前得DOM得话,直接写就可以了
生存期:只要是组件显示再页面中了,之后不管做什么操作,那么都是再生存期下完成的
componentWillReceiveProps:用来判断props属性是否改变得
shouldComponentUpdate:用来判断组件是否更新得,如果返回值是true就更新,之后得钩子函数也会执行,如果是false就不更新,之后得钩子函数就不执行
componentWillUpdate:更新之前执行得
render:因为再react中我们就是通过render这个方法来返回一个虚拟DOM得
componentDidUpdate:更新之后得钩子函数,因为之前调用过render方法,所以再这个钩子函数中就可以对DOM进行操作了
销毁期:
componentWillUnmount:销毁之前调用得钩子函数
组件再销毁得时候先清除组件中得定时器和延迟器,然后清除事件监听,随后销毁组件
11、shouldComponentUpdate:用来判断组件是否更新的一个方法
怎么判断一个组件是否被更新了,通过什么方法来判断:shouldComponentUpdate
怎么让DOM没改变的话不更新组件,在shouldComponentUpdate中让return的返回值是false即可
12、新的生命周期:16以后有的,没有废除旧生命周期的方法,但是新旧生命周期的方法不能同时使用
废除了:3个带Will的
componentWillMount
componentWillReceiveProps
componentWillUpdate
新增了两个:
getDerivedStateFromProps:会在初始化和Update时触发的,用于替换componentWillReceiveProps和componentWillMount,可以利用props更新state
它是一个静态方法,所以前边需要加上static,是获取不到实例this的,并且不能访问this.props,强制的让我们去比较nextProps(从父组件中传过来的属性值)和prevState(原有组件的存属性的值)中的值
getSnapshotBeforeUpdate:用于替换componentWillUpdate,会在update后DOM更新前被调用,用于读取最新的DOM数据的
13、在react中想要操作哪个组件就必须要给哪个组件加上操作得代码,像单机header组件,那么就需要在header组件中加上单机得事件和处理函数
14、getDerivedStateFromProps:替换WillMount和WillReceiveProps这两个钩子函数
有两个参数:nextProps(用来接收属性值得)和prevState(获取当前组件中状态值得),因为如果想要更新组件那么必须要改变状态才能达到组件得更新,属性是一个静态得,属性是不能变得,
15、getSnapshotBeforeUpdate:(使用场景:获取组件更新之前得滚动条位置)
触发时间:update发生得时候,在render之后(返回一个虚拟DOM),在组件DOM渲染之前
需要配合componentDidUpdate进行使用
componentDidUpdate有两个参数,这两个参数和getDeriverStateFromProps参数是一样得
这个钩子函数也有返回值,它的返回值会给componentDidUpdate得带三个参数中
2、react-生命周期1※※※的更多相关文章
- React生命周期
在react生命周期中,分2段执行,一个挂载的生命周期,一个是组件发生了数据变动,或者事件触发而引发的更新生命周期. 注:react生命周期很重要,对于很多组件场景的应用发挥重要作用,而且不熟悉生命周 ...
- React 生命周期
前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1.g ...
- React生命周期详解
React生命周期图解: 一.旧版图解: 二.新版图解: 从图中,我们可以清楚知道React的生命周期分为三个部分: 实例化.存在期和销毁时. 旧版生命周期如果要开启async rendering, ...
- React生命周期简单详细理解
前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1.g ...
- 22.1 、react生命周期(一)
在每个react组件中都有以下几个生命周期方法~我们需要在不同阶段进行讨论 组件生命周期概述 1.初始化 在组件初始化阶段会执行 constructor static getDerivedStateF ...
- react 生命周期钩子里不要写逻辑,否则不生效
react 生命周期钩子里不要写逻辑,否则不生效,要把逻辑写在函数里,然后在钩子里调用函数,否则会出现问题.
- react复习总结(2)--react生命周期和组件通信
这是react项目复习总结第二讲, 第一讲:https://www.cnblogs.com/wuhairui/p/10367620.html 首先我们来学习下react的生命周期(钩子)函数. 什么是 ...
- React生命周期执行顺序详解
文章内容转载于https://www.cnblogs.com/faith3/p/9216165.html 一.组件生命周期的执行次数是什么样子的??? 只执行一次: constructor.compo ...
- vue生命周期和react生命周期对比
一 vue的生命周期如下图所示(很清晰)初始化.编译.更新.销毁 二 vue生命周期的栗子 注意触发vue的created事件以后,this便指向vue实例,这点很重要 <!DOCTYPE ht ...
- react生命周期知识点
react生命周期知识点 一个React组件的生命周期分为三个部分:实例化.存在期和销毁时. 实例化 组件在客户端被实例化,第一次被创建时,以下方法依次被调用: 1.getDefaultProps2. ...
随机推荐
- React实践:自定义html特性不显示
发现React中自定义的html特性在render后是不现实,而且getAttribute方法也只能获取到undefined. 后来去stackoverflow提问,网友回答说: It depends ...
- 使用Flutter开发的抖音国际版
简介 最近花了两天时间研究使用Flutter开发一个抖音国际版. 先上图,个人感觉使用Flutter开发app快得不要不要的额. 两天就基本可以开发个大概出来. 最主要是热更新,太方便实时调整U ...
- 可修改的区间第K大 BZOJ1901 ZOJ2112
http://blog.csdn.net/u014492306/article/details/47981315 //变相离线做法 离散化缩小区间范围,做两大个线段树,第一个就是普通的持久化树,有个前 ...
- CSS3中的rem单位
一.rem介绍 rem是什么? 它的全称是 font size of the root element (根元素的字体大小) 它是CSS3中新增加的一个尺寸(度量)单位,根节点(html)的font- ...
- 工作中oracle常用操作
常用数据库操作 启动数据库监听器lsnrctl start 停止数据库监听器lsnrctl stop 登录oraclesqlplus / as sysdba启动oralcestartup;关闭orac ...
- Druid数据库连接池的使用
Druid 阿里提供的数据库连接池,集以上连接池优点于一身,开发使用此连接池 使用配置文件方式获取Druid数据库连接池 TestDruid package com.aff.connection; ...
- Bank3
Account: package banking3; //账户 public class Account { private double balance;// 账户余额 public Account ...
- python的map,reduce函数与pandas的apply,filter函数
1. python自带的apply.filter.map函数.reduce函数,很多情况下可以代替for循环: map(func,list),对list的每个元素分别执行func函数操作,显然func ...
- 关于thisState的那些事
1.state的定义 状态(state) 和 属性(props) 类似,都是一个组件所需要的一些数据集合,但是它是私有的,并且由组件本身完全控制,可以认为它是组件的“私有属性(或者是局部属性)”. 2 ...
- Alpha冲刺——4.30
这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.规 ...