React 组件的生命周期根据广义定义描述,可以分为挂载、渲染和卸载这几个阶段。
我们可以把 React 生命周期分成两类:
- 当组件在挂载或卸载时
-
组件挂载是最基本的过程,这个过程主要做组件状态的初始化
- 注意1:如果我们在 componentWillMount 中执行 setState 方法,会发生什么呢?组件会更新 state, 但组件只渲染一次。因此,这是无意义的执行,初始化时的 state 都可以放在 this.state 。
- 注意2:如果我们在 componentDidMount 中执行 setState 方法,又会发生什么呢?组件当然会再次更 新,不过在初始化过程就渲染了两次组件,这并不是一件好事。但实际情况是,有一些场景不得 不需要 setState ,比如计算组件的位置或宽高时,就不得不让组件先渲染,更新必要的信息后, 再次渲染。
-
组件卸载非常简单,只有 componentWillUnmount 这一个卸载前状态:在 componentWillUnmount 方法中,我们常常会执行一些清理方法,如事件回收或是清除定 时器
- 当组件接收新的数据时,即组件更新时
更新过程指的是父组件向下传递 props 或组件自身执行 setState 方法时发生的一系列更新动作。
- 如果组件自身的 state 更新了,那么会依次执行 shouldComponentUpdate 、 componentWillUpdate 、 render 和 componentDidUpdate
- shouldComponentUpdate 是一个特别的方法,它接收需要更新的 props 和 state,让开发者增加 必要的条件判断,让其在需要时更新,不需要时不更新。
- componentWillUpdate 和 componentDidUpdate 这两个生命周期方法很容易理解,对应的初始化 方法也很容易知道,它们代表在更新过程中渲染前后的时刻。
- 注意:你不能在 componentWillUpdate 中执行 setState 。
- 如果组件是由父组件更新 props 而更新的,那么在 shouldComponentUpdate 之前会先执行 componentWillReceiveProps 方法。
- 整体流程
下图是使用 ES6 classes 与 createClass 构建组件方法的异同:
