React ⽣命周期函数

🌙
手机阅读
本文目录结构

问题

React ⽣命周期函数

答案

在 V16 版本中引⼊了 Fiber 机制。这个机制⼀定程度上的影响了部分⽣命 周期的调⽤,并且也引⼊了新的 2 个 API 来解决问题

在之前的版本中,如果你拥有⼀个很复杂的复合组件,然后改动了最上层组件 的 state ,那么调⽤栈可能会很⻓

调⽤栈过⻓,再加上中间进⾏了复杂的操作,就可能导致⻓时间阻塞主线程,带来不好的 ⽤户体验。 Fiber 就是为了解决该问题⽽⽣

Fiber 本质上是⼀个虚拟的堆栈帧,新的调度器会按照优先级⾃由调度这些帧,从⽽将 之前的同步渲染改成了异步渲染,在不影响体验的情况下去分段计算更新

对于如何区别优先级, React 有⾃⼰的⼀套逻辑。对于动画这种实时性很⾼的东⻄,也 就是 16 ms 必须渲染⼀次保证不卡顿的情况下, React 会每 16 ms (以内) 暂停⼀ 下更新,返回来继续渲染动画

对于异步渲染,现在渲染有两个阶段: reconciliation 和 commit 。前者过程是可以 打断的,后者不能暂停,会⼀直更新界⾯直到完成。

初始化阶段

  • getDefaultProps :获取实例的默认属性
  • getInitialState :获取每个实例的初始化状态
  • componentWillMount :组件即将被装载、渲染到⻚⾯上
  • render :组件在这⾥⽣成虚拟的 DOM 节点
  • omponentDidMount :组件真正在被装载之后

运⾏中状态

  • componentWillReceiveProps :组件将要接收到属性的时候调⽤
  • shouldComponentUpdate :组件接受到新属性或者新状态的时候(可以返回false,接收数
  • 据后不更新,阻⽌ render 调⽤,后⾯的函数不会被继续执⾏了)
  • componentWillUpdate :组件即将更新不能修改属性和状态
  • render :组件重新描绘
  • componentDidUpdate :组件已经更新

销毁阶段

  • componentWillUnmount :组件即将销毁

因为 Reconciliation 阶段是可以被打断的,所以 Reconciliation 阶段 会执⾏的⽣命周期函数就可能会出现调⽤多次的情况,从⽽引起 Bug 。由此 对于 Reconciliation 阶段调⽤的⼏个函数,除了 shouldComponentUpdate 以外,其他都应该避免去使⽤,并且 V16 中也 引⼊了新的 API 来解决这个问题。

getDerivedStateFromProps ⽤于替换 componentWillReceiveProps , 该函数会在初始化和 update 时被调⽤

更多面试题

如果你想了解更多的前端面试题,可以查看本站的WEB前端面试题 ,这里基本包涵了市场上的所有前端方面的面试题,也有一些大公司的面试图,可以让你面试更加顺利。

面试题
HTML CSS JavaScript
jQuery Vue.js React
算法 HTTP Babel
BootStrap Electron Gulp
Node.js 前端经验相关 前端综合
Webpack 微信小程序 -

这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了