再一次深入了解react的生命周期

栏目: 服务器 · 发布时间: 5年前

内容简介:一、起因记得在2017年4月,曾经在自己的博客中写过一篇借用官网的一张图

一、起因

记得在2017年4月,曾经在自己的博客中写过一篇 react-lifeCycle ,有兴趣的朋友可以回顾下!如今到现在react的版本已经发生了太多的变化,所以又再一次重新认识一下 生命周期

借用官网的一张图

再一次深入了解react的生命周期

从上图中可以大概的看出整个生命周期的组成和构成以及运行的顺序,掌握这些对于react代码的书写有很重要的作用,比如何时更新,何时销毁,何时注意性能等等一系列的问题,下面要说的就是举例说明了;

现在书写组建基本上都是使用ES6的方法或者是stateless的方法,这里用ES6方法来讲:

1、static defaultProps = {} - 初始化props的地方

2、static propTypes = {} - 检测或要求props类型的地方

有的将此属性书写在组建外部,以前这个检测的方法是在react点下,如今已经将这一部分移除来成为了一个单独的插件 prop-types

3、构造方法

constructor(props){
    super(props)
    this.state = {}
}
构造方法本身其实就是构造函数的本身,在ES5中是没有继承的写法的,因此通过prototype来达到目的,例如
    //构造函数People
   function People (name,age){
        this.name = name;
        this.age = age
    }
    People.prototype.sayName = function(){
        return '我的名字是:'+this.name;
    }
    let p1 = new People('harrisking',23);
    console.log(p1.sayName()) //我的名字是:harrisking
在ES6中可以这样来实现
    class People{
        //构造方法constructor就等于上面的构造函数People
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        sayName(){
            return '我的名字是:'+this.name;
        }
    }
    //创建新的子类p1
    let p1 = new People('harrisking',23);
    console.log(p1.sayName()) 
上面两种是一样的
而super()是用来继承父类的this的对象,如果不写就会得不到this,那么在构造函数中书写this.state就会报错。
有些人会在构造函数中书写绑定事件到this上,如下
this.handle = this.handle.bind(this),这在方法中是没有写箭头函数或者避免在d标签中绑定this(<div onClick={this.handle.bind(this)} ></div>)
如果要在其中使用this.props就必须要在构造函数中加参数props

当然你也可以不写这个构造函数,在render中是有this的,这个是react自带的

4、componentWillMount

5、render

6、componentDidMount

至此初始化时应该用到的周期就是这些;

二、周期举例

运行时周期的顺序以例子来讲明:

父组建IndexPage 子组建Son 再一次深入了解react的生命周期

再一次深入了解react的生命周期

直接来看浏览器的运行结果

再一次深入了解react的生命周期

初始化阶段的顺序为will --- render ---- Mount遇到子组建先执行子在执行父

当我们点击Welcome to Here的时候周期顺序如图

再一次深入了解react的生命周期

在父组建中调用setState后就会走render周期,子组建就会接收新的props进入componentWillReceiveProps周期,然后决定是否进行更新子组建周期shouldComponentUpdate,返回true则更新,返回false不跟新,这里一般用于优化作用,当返回true时进入即将更新阶段componentWillUpdate阶段然后render,最后进入更新后阶段componentDidUpdate

(

shouldComponentUpdate周期用于优化react项目的性能,可以选择更新或不更新,官网也推出了react的另外一个属性PureComponent,
即class Son extent React.PureComponent,用这个属性来代替手写shouldComponentUpdate, 但是它只是对属性进行浅比较,如果属性的层级太深就只能进行手动了

)

当我们点击Son组建中的button的时候,看看内部周期是怎样的顺序

再一次深入了解react的生命周期

周期仍然于更新一样,这里不在赘述了

三、卸载周期 componentWillUnmount

常在此周期中进行定时器的销毁,或者引用外部对象的销毁(destroy);

每次熟悉一遍就有一遍的收获!学以致用,知情分享!乐在其中!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法分析-有效的学习方法(影印版)

算法分析-有效的学习方法(影印版)

Jeffrey J.McConnell / 高等教育出版社 / 2003-03-01 / 28.0

本书主要目标是提高读者关于算法对程序效率的影响等问题的认知水平,并培养读者分析程序中的算法所必需的技巧。各章材料以激发读者有效的、协同的学习方法的形式讲述。通过全面的论述和完整的数学推导,本书帮助读者最大限度地理解基本概念。 本书内容包括促使学生参与其中的大量程序设计课题。书中所有算法以伪码形式给出,使得具备条件表达式、循环与递归方面知识的读者均易于理解。本书以简洁的写作风格向读者介绍了兼具......一起来看看 《算法分析-有效的学习方法(影印版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码