React 生命周期图谱

介绍一下 React 的生命周期函数

假设我们有如下的 Dom 结构

<FC>
<InnerFC/>
</FC>
<Component>
<InnerComponent/>
</Compoennt>

那么在构建与刷新的过程中生命周期函数是如何执行的。先给出结论,具体的顺序如下
生命周期可以分为四个阶段:渲染阶段,提交前阶段,提交阶段,提交后阶段

  • 渲染阶段可以理解为 render 函数执行结束前都算。主要的功能是 React VD 的刷新与构建。
    涉及到的钩子有:getDerivedStateFromProps,shouldUpdate,componentWillUpdate,render,componentWillMount,
  • 提交前阶段,介于 render 函数之后,Dom 绘制之前,但是 Dom 的结构以及好了
    涉及到的钩子有:getSnapshotBeforeUpdate,
  • 提交阶段,Dom 绘制之后,这个时候 Dom 以及稳定。
    涉及到的钩子:ComponentDidMount,componentDidUpdate,React.useLayoutEffect(),componentDidUnmount,
  • 提交后阶段,这个阶段是 React.useEffect 执行的阶段。

组件渲染的顺序是,首先是分为四个阶段,

  • 渲染阶段,由上到下,由父到子,对每个组件一次性按顺序执行完所有改阶段的钩子,例如构建的时候,执行 getDerivedStateFromProps, componentWillMount,render, 刷新的时候执行 getDerivedStateFromProps,shouldUpdate,componentWillUpdate,render。
  • 在其他的三个阶段,还是一样,由阶段进行分组,每个阶段内,将所有的组件的钩子都要一次性执行完。但是执行的顺序是由上到下,由子到父

所以,我们可以将它们分为捕获阶段(渲染阶段),冒泡阶段(提交前阶段,提交阶段,提交后阶段)。

下面就是上面例子的刷新图

创建渲染顺序

捕获阶段:

  • FC
  • innerFC
  • Component:getDerivedStateFromProps,render
  • InnerComponnet:getDerivedStateFromProps,render

冒泡阶段:

  • innerFC: useLayoutEffect
  • FC: useLayoutEffect
  • innerComponent: componentDidMount
  • Component:componentDidMount
  • innerFC: useEffect
  • FC: useEffect

刷新渲染顺序:

捕获阶段:

  • FC:
  • innerFC
  • Component:getDerivedStateFromProps,shouldComponentUpdate,render,
  • InnerComponnet:getDerivedStateFromProps,shouldComponentUpdate,componentWillUpdate,render,

冒泡阶段:

  • innerComponent: getSnapshotBeforeUpdate
  • Component:getSnapshotBeforeUpdate
  • innerFC: useLayoutEffect
  • FC: useLayoutEffect
  • innerComponent: componentDidUpdate
  • Component:componentDidUpdate
  • innerFC: useEffect
  • FC: useEffect
posted @ 2021-12-22 11:04  kongshu  阅读(163)  评论(0编辑  收藏  举报