React - 生命周期

395 阅读2分钟

image.png 看上面这个图够了,挺简单的。这个图是react官方给的 链接。官方讲解:the-component-lifecycle
尚硅谷那个视频太老了,花了太多时间讲一些过时的和不常用的东西。
下面写的东西可看可不看。

概念

挂载 mount:即把组件渲染到页面上,把组件放到页面上。
卸载 unmount:即把组件从页面上干掉。

引入生命周期

因为有实际的需求,例如要在组件挂载完毕后做某些事情,所以react提供这些生命周期钩子用来完成此类需求。
componentDidMount():组件挂载完毕之后调用。
componentWillUnmount():组件将要卸载时调用。

生命周期流程图

image.png

组件挂载流程

如图左侧为组件挂载过程中涉及的生命周期钩子,按执行顺序排列如下:
constructor()
componentWillMount()
render()
componentDidMount()

setState()流程

如图右侧从setState()开始的流程,调用setState()时涉及的生命周期钩子,按执行顺序排列如下:
shouldComponentUpdate()
componentWillUpdate()
render()
componentDidUpdate()

shouldComponentUpdate() 默认返回true。如果返回false,则此过程到此为止,不再继续向下执行。所以此钩子的功能相当于一个『阀门』。

forceUpdate()流程

可以调用this.forceUpdate()进行强制更新,如图,不更新state,但要调用render()。
生命周期钩子执行顺序,看图右侧从forceUpdate()开始的流程。

父组件render对子组件的影响

多了一个钩子 componentWillReceiveProps()父组件第一次 render 时不触发,props 发生变化时才触发
生命周期钩子执行顺序,看图右侧从“父组件render”开始的流程。

总结

主要关注三个流程:初始化(组件挂载),更新(setState()),卸载。
最常用的两个钩子:componentDidMount()componentWillUnmount()
讲到了哪些钩子:
componentWillMount()(已不推荐)
componentDidMount()
componentWillUpdate()(已不推荐)
componentDidUpdate()
shouldComponentUpdate()
componentWillReceiveProps()(已不推荐)

生命周期流程图(新)

image.png

变化

变化是有三个钩子不再推荐使用,上面有提到。另外增加了两个,getDerivedStateFromProps()getSnapshotBeforeUpdate(),并不常用,所以暂不研究。

参考资料

尚硅谷React教程
删除每节视频标题的前缀:

[...document.querySelectorAll('.part')].map(e => e.innerHTML = e.innerHTML.slice(10));