一、基础
先来介绍一下生命周期的定义
1) componentWillMount(){}
1 | // Mounting 安装阶段 |
1 | // Mounting 安装阶段 |
2)componentDidMount(){}
1 | // Mounting 安装阶段 |
3)componentWillReceiveProps(nextProps){}
1 | // Updating 更新阶段 |
4)shouldComponentUpdate(nextProps, nextState){}
1 | // Updating 更新阶段 |
5) componentWillUpdate(nextProps, nextState){}
1 | // Updating 更新阶段 |
6)componentDidUpdate(nextProps, nextState){}
1 | // Updating 更新阶段 |
7)componentWillUnmount(){}
1 | // Unmounting 卸载阶段 |
二、生命周期的执行顺序
举例:只有一个组件,里面有一个onClick事件改变一个state
刷新页面:1
2
3a、componentWillMount---> // 可以更改state
render()---->
componentDidMount // 周期结束
触发onClick事件:(前提只有事件中出发setState,其他中没有)1
2
3
4
5
6
7
8shouldComponentUpdate中 return true
shouldComponentUpdate-->
componentWillUpdate-->
render()-->
componentDidUpdate //周期结束
shouldComponentUpdate中 return false
shouldComponentUpdate //周期结束
上面只是一个很简单的例子讲述了周期的执行顺序,大家可以根据顺序去做相应的操作,当然在componentWillUpdate和componentDidUpdate这两个周期中不可以使用this.setState,需要使用此方法可以在componentWillReceiveProps中去操作。周期中可能进行的操作在上面的定义中以解释。
举例:父、子组件,父组件和上述相同,字段件只是一个纯ui组件没有任何的操作,接受父组件传来的props(父组件的click可控制props的内容)。
刷新页面:1
父componentWillMount--->父render()---->子componentWillMount--->子render()--->子componentDidMount--->父componentDidMount
触发onClick事件:
1 | 子组件shouldComponentUpdate 返回的是false |
componentWillUnmount阶段
当你的组件关闭的时候,例如跳转页面的时候,此周期执行一次。可能做的操作在上面的定义。
给出一段代码:(就是上述的子组件)
1 | import React, { Component } from 'react'; |
根据上面的代码,说一个组件实例的初始化的方法过程
1 | 1)`getInitialState` 设置初始状态值,(掉调用一次),可使用setState方法更改状态 |
es6语法则在这是用:
1 | constructor(props) { |
1 | 2)`getDefaultProps `设置初始props的值,不可以更改 |
// Input (JSX):1
var Nav = React.createClass({ });
// Output (JS):1
var Nav = React.createClass({displayName: "Nav", });
执行的顺序就是上述代码片段的顺序!
三、总结
详细了解生命周期的特性,有助于处理数据,更好的节约性能。本人一点点小的见解,还望各位路过的大神,赏脸批评指正!