React 15~18每个阶段更新了什么

embedded/2024/9/29 5:37:54/

文章目录

  • React 15
  • React 16
  • React 17 试验性并发模式
  • React 18

React 15

React.createClass (弃用)
class 组件
函数组件(无状态、纯UI组件)
堆栈diff(同步更新state1->state2->state3…、每个更新过程不可中断

每个更新过程包括:

  1. setState
  2. 创建虚拟dom节点
  3. 虚拟dom对比完成,创建真实dom节点

React 16

hooks:让函数式组件有了和类组件一样的状态(副作用函数可以模拟生命周期)
React fiber:取代堆栈diff,可中断更新机制

  • 基于浏览器单线程调度算法:原生js的requestIdleCallback(在浏览器空闲的时候执行)

requestAnimationFrame:在浏览器执行重排重绘渲染前面调用,使用场景:把动画、更新dom的操作放入raf的回调函数中,性能较好。

  • 如果这一帧16.6ms执行完,还剩余一点时间,RIC 会被执行。

小结

  • RIC 执行时机:宏任务、微任务、raf、渲染完成之后执行。
    • 在callback中执行一些轻量的微任务。(存在任务优先级)

React fiber 分为两个阶段:

  1. 协调阶段:创建vdom过程中,打断低优先级,执行高优先级的任务。(∴ 伴随新生命周期的出现,老生命周期可能会重复执行两次。)
  • React意识到componentWillMount、componentWillReceiveProps和componentWillUpdate这三个生命周期函数有缺陷,比较容易导致崩溃。但是由于旧的项目已经在用以及有些老开发者习惯用这些生命周期函数,于是通过给它加**UNSAFE_**来提醒用它的人要注意它们的缺陷。
  • 替换方案:React 16.3 加入了两个新的生命周期函数getSnapshotBeforeUpdate和getDerivedStateFromProps。
  • 17.0:删除componentWillMount,componentWillReceiveProps 和 componentWillUpdate。 (从现在开始,只有新的“UNSAFE_”生命周期名称将起作用。)
  1. 提交阶段:提交真实dom,不允许被打断。

React 17 试验性并发模式

交替执行不同的任务

React 18

concurrent mode 并发模式,不是一个具体功能,是一个底层设计。
基于并发模式,18 给出两个API,让开发者自己决定优先级的高低。
底层如何实现:基于fiber架构,requestIdleCallback 空闲函数来实现。

  • 使用ReactDOM.createRoot( ) 默认开启批处理功能和**并发模式*。*
  • 使用 useTransition()、useDeferredValue() 指定非紧急任务更新。

http://www.ppmy.cn/embedded/16381.html

相关文章

JAVA毕业设计136—基于Java+Springboot+Vue的房屋租赁管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的房屋租赁管理系统(源代码数据库)136 一、系统介绍 本项目前后端分离,分为管理员、用户、工作人员、房东四种角色 1、用户/房东: …

Ansible自动化

Ansible自动化 自动化的需求: 1. 在什么样的场景下需要自动化? 批量化的工作: 装软件包、配置服务、升级、下发文件… 2. 为什么在自动化工具中选择ansible? 对比shell脚本: 相对于用shell的脚本来实现自动化&#x…

【Qt QML】TabBar的用法

Qt Quick中的TabBar提供了一个基于选项卡的导航模型。TabBar由TabButton控件填充,并且可以与任何提供currentIndex属性的布局或容器控件一起使用,例如StackLayout或SwipeView。 import QtQuick import QtQuick.Controls import QtQuick.LayoutsWindow …

微软在汉诺威工业博览会上推出新制造业Copilot人工智能功能,强化Dynamics 365工具集

在近日于德国汉诺威举行的盛大工业博览会上,微软向全球展示了其最新推出的制造业人工智能功能,这些功能以Dynamics 365工具集为核心,旨在通过先进的AI技术为制造业带来前所未有的变革。 此次推出的新功能中,最为亮眼的是支持AI的…

Spring Boost + Elasticsearch 实现检索查询

需求:对“昵称”进行“全文检索查询”,对“账号”进行“精确查询”。 认识 Elasticsearch 1. ES 的倒排索引 正向索引 对 id 进行检索速度很快。对其他字段即使加了索引,只能满足精确查询。模糊查询时,逐条数据扫描&#xff0c…

函数—描述现实世界现象的基本工具

在数学和物理学中,函数是描述现实世界现象的基本工具。将函数视为对象可以极大地简化模型的分析和求解过程。以下是一些关键点,说明为什么这种抽象化的方法是有用的: 简化复杂性:函数可以捕捉现实世界问题的复杂性,而数…

微信小程序按钮点击时的样式hover-class=“hover“

小程序的button组件很好用,按钮点击的时候会显示点击状态,默认的就是颜色加深 但是我们改变了button的背景色之后,就看不出点击效果了,解决起来也很简单 关键代码就是小程序的 hover-class 属性,需要注意的是&#xff…

3.7设计模式——Observer 观察者模式(行为型)

意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新。 结构 Subject(目标)知道它的观察者,可以有任意多个观察者观察同一个目标,提供注册和删…