- constructor:初化生命周期函数
1.在这个生命周期函数里面,可以定义当前组件需要的一些状态,通过this.state = { }来定义状态
2.当前生命周期必须使用super这个方法,否则会报错;当前组件的状态必须定义在this.state里面
3.super( ):用来实现继承 - componentWillMount:挂载前
1.当constructor执行完毕以后当前的生命周期就会执行,在这个生命周期函数里面我们可以通过this.props访问到外部属性。
2.在这个生命周期函数里面我们可以将外部属性转换为内部属性。 - render:渲染
1.render函数用来渲染虚拟DOM,其实就是讲真实的js对象与数据相结合生成真正的DOM
2.render函数什么时候会执行?当this.state或者this.props的数据发生改变的时候那么render函数就会执行
3.render函数第一次执行的时候会将渲染的结果保存在缓存中,当this.state 或者 this.props发生改变的时候,那么render函数就会再次执行,这次执行的时候会将上一次的缓存结果,和这一次渲染的结果进行对比,比较哪一个虚拟DOM节点发生了改变,找到这个节点后会重新渲染这个节点而不是虚拟DOM,像这样的对比方式叫做diff算法,当渲染完毕以后会将这次的结果再次保存在缓存之中 - componentDidMount:挂载后,渲染完成
1.当render函数执行完毕后,也就是虚拟DOM和数据结合完毕以后生成了真实的DOM结果,在这个声明周期函数里面我们可以获取到真是的DOM,同时也可以在当前的生命周期函数中进行ajax请求。 - componentWillUnmount:销毁
1.当组件被隐藏的时候就会被销毁掉,可以在这个生命周期里面将事件绑定的函数进行解绑等操作
ps:以上5个周期函数,除了render函数,其他生命周期函数都只会执行一次
- componentWillReceiveProps
1.当外部属性发生改变的时候当前生命周期函数就会执行,这个生命周期函数里面会接受到一个新的props - shouldComponentUpdate:dom是否开始改变(里面接收两个新值,一个是新的props,一个是新的state)
1.如果this.state 或者 this.props发生改变的时候这个生命周期函数就回去执行
2.当前生命周期函数必须要返回一个布尔值,如果返回true则进行更新,下面的生命周期数会执行;否则不更新,不执行。
3.我们可以进行数据的对比来决定当前的虚拟DOM是否需要更新,可以提高性能。我们可以在当前的声明周期函数里面进行性能的优化
4.当前生命周期函数判断的不是数据是否需要更新,而是DOM是否需要更新,哪怕在当前的生命周期函数中return false,this.state 或者 this.props里面的数据也会发生改变,只不过return false 时不会执行下面的生命周期函数了 - componentWillUpdate:更新前
1.如果shouldComponentUpdate返回值为true的话,就会执行当前生命周期函数,当前生命周期函数是更新前,在这里我们可以看到更新之前的DOM结构,这个生命周期函数是所以的数据和虚拟DOM准备就绪。等待渲染
2.在当前生命周期函数里面接受到2个参数 一个是新的props 一个是新的state - componentDidUpdate
1.当前生命周期函数是更新完毕,在这里我们可以获取最新的一些DOM结构。也可以看到更新后最新的一些数据
2.在当前生命周期函数里面接受到2个参数 一个是旧的props 一个是旧的state