https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
比如挂载阶段(Mount),组件第一次在DOM树中被渲染的过程;
比如更新过程(Update),组件状态发生变化,重新更新渲染的过程;
比如卸载过程(Unmount),组件从DOM树中被移除的过程;



所谓的生命周期就是指某个事物从开始到结束的各个阶段,就好像是把人的出生到死亡分成一个个阶段,你肯定是在出生阶段起名字,而不会在成年或者死亡的阶段去起名字。当然在 React.js 中指的是组件从创建到销毁的过程,React 实例从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 React 的生命周期,各个阶段有相对应的事件钩子,用户可以在特定的阶段调用特定的方法。每个阶段组件内部的属性都是不一样的,所以一般特定的钩子做特定的事。
这么多生命周期钩子,实际上总结起来只有三个过程:挂载、更新、卸载,挂载和卸载只会执行一次,更新会执行多次。
一个完整的React组件生命周期会依次调用如下钩子
【1】生命周期演变
| React版本 | 挂载阶段 | 更新阶段 | 卸载阶段 |
|---|---|---|---|
| 之前(React 16.3 之前) | constructor componentWillMount render componentDidMount | componentWillReceiveProps shouldComponentUpdate componentWillUpdate render componentDidUpdate | componentWillUnmount |
| 现在 | constructor getDerivedStateFromProps render componentDidMount | getDerivedStateFromProps shouldComponentUpdate render getSnapshotBeforeUpdate componentDidUpdate | componentWillUnmount |
【2】废弃和新增
原来(React v16.0前)的生命周期在React v16推出的Fiber之后就不合适了,因为如果要开启async rendering,在render函数之前的所有函数,都有可能被执行多次。所以除了shouldComponentUpdate,其他在render函数之前的所有函数(componentWillMount,componentWillReceiveProps,componentWillUpdate)都被getDerivedStateFromProps替代。
以下生命周期钩子将被逐渐废弃,看出特点了么,都是带有will的钩子
- componentWillMount
- componentWillReceiveProps
- componentWillUpdate
引入了以下两个生命周期钩子
- getDerivedStateFromProps
- getSnapshotBeforeUpdate
【3】注意