React 的生命周期

作者: 弱冠而不立 | 来源:发表于2021-01-11 16:18 被阅读0次

v17 的生命周期钩子函数概览

类组件

挂载时顺序
  1. constructor()
  2. static getDerivedStateFromProps(props, state)
  3. render()
  4. componentDidMount()
更新时顺序
  1. static getDerivedStateFromProps(props, state)
  2. shouldComponentUpdate()
  3. render()
  4. static getSnapshotBeforeUpdate(prevProps, prevState)
  5. componentDidUpdate()
卸载
  • componentWillUnmount()

函数式组件

  // 第一次渲染之后和每次更新之后都会执行,相当于类组件的componentDidMount 和 componentDidUpdate
  useEffect(() => {
    document.title = `You clicked ${count} times`;
    // 卸载时调用,相当于类组件的componentWillUnmount
    return ()=> {}
    // 数组表示更新依赖的属性
  }, []);

现版本废弃的生命周期钩子函数

v15 和 v16之后版本的生命周期对比
  • componentWillMount
  • componentWillUpdate
  • componentWillReceiveProps

共同点

都处于 render 阶段

废弃原因

React 团队出于性能的考虑,在v16时引入了Fiber架构,这里简要概括一下。

Fiber架构下, react渲染程序会将一个大的更新任务拆解为许多个小任务。每当执行完一个小任务时,渲染线程都会把主线程交回去,看看有没有优先级更高的工作要处理,确保不会出现其他任务被“饿死”的情况,进而避免同步渲染带来的卡顿。在这个过程中,渲染线程不再“一去不回头”,而是可以被打断的,这就是所谓的“异步渲染”。

在 Fiber 机制下,render 阶段是允许暂停、终止和重启的。
废弃的生命周期钩子函数,它们都处于render阶段,都可能被重复执行。

使用废弃的生命周期钩子函数可能造成的问题

  1. 完全可以转移到 componentDid(xxx) 中去做
    以前以为,在 willMount 里发异步请求,能让数据得到的快些。但是,componentWillMount 结束后,render 会迅速地被触发,所以说首次渲染依然会在数据返回之前执行。这样做不仅没有达到你预想的目的,还会导致服务端渲染场景下的冗余请求等额外问题,得不偿失。
  2. 在 Fiber 带来的异步渲染机制下,可能会导致非常严重的 Bug
    假如你在 componentWillxxx 里发起了一个付款请求。由于 render 阶段里的生命周期都可以重复执行,在 componentWillxxx 被打断 + 重启多次后,就会发出多个付款请求。
    或者你可能会习惯在 componentWillReceiveProps(在已挂载的组件接收新的 props 之前被调用) 里操作 DOM(比如说删除符合某个特征的元素),那么 componentWillReceiveProps 若是执行了两次,你可能就会一口气删掉两个符合该特征的元素。
  3. 在 componentWillReceiveProps 和 componentWillUpdate 里滥用 setState 导致重复渲染死循环的

相关文章

  • React基础篇之组件的生命周期

    引出生命周期 react生命周期(旧) react生命周期(新) getSnapshotBeforeUpdate的...

  • React概念图

    React概念图 React组件生命周期概念图 参考文档:React入门教程 组件生命周期React:组件生命周期...

  • React生命周期

    React v16.0前的生命周期 React v16.4+ 的生命周期图 React v16.9后这些生命周期钩...

  • React v16 生命周期

    React 16 生命周期 React 16.3 新增的生命周期方法 逐渐废弃的生命周期方法: 一般将生命周期分成...

  • 学习并实现react (4)

    实现生命周期 生命周期介绍 React 生命周期图 React 子组件在父组件下的生命周期流程 实现 compon...

  • react/vue常见问题整理

    一、react 1. react生命周期 react 16生命周期相对于15的变化:componentWillMo...

  • React面试题 整理脑图

    react基础 React生命周期 react-router react进阶 react Hooks redux 其他

  • 《深入React技术栈》学习笔记Ⅲ

    以下的生命周期都是在 React 15 的生命周期, React 16 的生命周期 API 已经发生变化。Reac...

  • React 组件生命周期

    组件生命周期 参考阅读: component-lifecycle react组件生命周期过程说明 react 组件...

  • React总结

    [toc] 1.React组件生命周期 1.1 生命周期图 组件的生命周期的图如下: 具体可参考React 组件生...

网友评论

    本文标题:React 的生命周期

    本文链接:https://www.haomeiwen.com/subject/wrpviktx.html