生命周期:
一个人的生命周期:从出生到去世
出生得那一刻就是当前这一个人特性固定下来得那一刻:实例化期
出生了之后生长知道死的那一刻:生存期
去世了:销毁期
所以对于一个组件来说它的生命周期是三个时期:实例化期、生存期和销毁期
实例化期和销毁期只能被执行一次,但是生存期会反复被调用执行
每一个时期都会调用不同的钩子函数来执行

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※※※的更多相关文章

  1. React生命周期

    在react生命周期中,分2段执行,一个挂载的生命周期,一个是组件发生了数据变动,或者事件触发而引发的更新生命周期. 注:react生命周期很重要,对于很多组件场景的应用发挥重要作用,而且不熟悉生命周 ...

  2. React 生命周期

    前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1.g ...

  3. React生命周期详解

    React生命周期图解: 一.旧版图解: 二.新版图解: 从图中,我们可以清楚知道React的生命周期分为三个部分:  实例化.存在期和销毁时. 旧版生命周期如果要开启async rendering, ...

  4. React生命周期简单详细理解

    前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1.g ...

  5. 22.1 、react生命周期(一)

    在每个react组件中都有以下几个生命周期方法~我们需要在不同阶段进行讨论 组件生命周期概述 1.初始化 在组件初始化阶段会执行 constructor static getDerivedStateF ...

  6. react 生命周期钩子里不要写逻辑,否则不生效

    react 生命周期钩子里不要写逻辑,否则不生效,要把逻辑写在函数里,然后在钩子里调用函数,否则会出现问题.

  7. react复习总结(2)--react生命周期和组件通信

    这是react项目复习总结第二讲, 第一讲:https://www.cnblogs.com/wuhairui/p/10367620.html 首先我们来学习下react的生命周期(钩子)函数. 什么是 ...

  8. React生命周期执行顺序详解

    文章内容转载于https://www.cnblogs.com/faith3/p/9216165.html 一.组件生命周期的执行次数是什么样子的??? 只执行一次: constructor.compo ...

  9. vue生命周期和react生命周期对比

    一 vue的生命周期如下图所示(很清晰)初始化.编译.更新.销毁 二 vue生命周期的栗子 注意触发vue的created事件以后,this便指向vue实例,这点很重要 <!DOCTYPE ht ...

  10. react生命周期知识点

    react生命周期知识点 一个React组件的生命周期分为三个部分:实例化.存在期和销毁时. 实例化 组件在客户端被实例化,第一次被创建时,以下方法依次被调用: 1.getDefaultProps2. ...

随机推荐

  1. python之PyCharm下载和安装教程

    PyCharm 是 JetBrains 公司(www.jetbrains.com)研发,用于开发 Python 的 IDE 开发工具.图 1 所示为 JetBrains 公司开发的多款开发工具,其中很 ...

  2. React:Refs and DOM

    React的哲学是在JS层面构建UI,并把UI组件以功能单位拆分成更小的组件单元,以利于复用和整合,父组件通过props作为操作子组件的唯一通道,甚至子组件想和父组件交互时,也只能依靠父组件通过pro ...

  3. meta标签设置不缓存

    平常调试的时候总是因为缓存问题有些浪费时间,加上这几行代码就ok了 <meta http-equiv="Cache-Control" content="no-cac ...

  4. 你想了解的python基础数据类型这里都有

    目录 python基础数据总结 数字型数据类型 数字型数据基本知识 算术运算符 进制 二进制运算符 字符串数据类型 字符串基础知识 字符串数据操作方法(增 查 改) 集合数据类型 集合基础知识 集合元 ...

  5. 【一致性检验指标】Kappa(cappa)系数

    1 定义 百度百科的定义: 它是通过把所有地表真实分类中的像元总数(N)乘以混淆矩阵对角线(Xkk)的和,再减去某一类地表真实像元总数与被误分成该类像元总数之积对所有类别求和的结果,再除以总像元数的平 ...

  6. vue 配置移动单位转换插件 postcss-px-to-viewport

    1.先安装插件 npm install postcss-px-to-viewport --save-dev 2.在文件根目录下添加 postcss.config.js 文件 module.export ...

  7. Win10上禁用Device Guard以便运行VMware

    Win10上每次大版本升级后,如果你试图运行VMware,都会提示如下的错误信息: “VMware Workstation 与 Device/Credential Guard 不兼容.在禁用 Devi ...

  8. vue-cli中的index.html ,main.js , App.vue的关系

    ###发现不少小伙伴才刚开始接触到这个结构都被绕的迷糊,而发现很多人说的也不是那么准确,那么下面我来说一下是怎么回事### 1.首先我们来看看原生Vue中组件的写法, 我们按照vue-cli的结构按照 ...

  9. [工具-003]如何从ipa中提取info.plist并提取相应信息

    最近公司的产品要进行一次批量的升级,产品中的一些配置存放在info.plist,为了保证产品的信息无误,我们必须要对产品的发布信息进行验证.例如:广告ID,umeng,talkingdata等等.那么 ...

  10. [SD心灵鸡汤]002.每月一则 - 2015.06

    1.用最多的梦面对未来 2.自己要先看得起自己,别人才会看得起你 3.一个今天胜过两个明天 4.要铭记在心:每天都是一年中最美好的日子 5.乐观者在灾祸中看到机会:悲观者在机会中看到灾祸 6.有勇气并 ...