当前位置: 首页 > news >正文

React18新特性

React 18新特性详解如下:
并发渲染(Concurrent Rendering):
React 18引入了并发渲染特性,允许React在等待异步操作(如数据获取)时暂停和恢复渲染,从而提供更平滑的用户体验。
通过时间分片和更新优先级机制,React可以在浏览器的一帧内完成多个渲染任务,减少卡顿现象。
新的根节点挂载方式:
React 18改变了根节点的挂载方式,使用createRoot来替代旧的render方法。这种新的挂载方式使得React应用能够更快地响应用户操作,提升用户体验。
使用createRoot后,会启用React 18的新特性,但旧的render API仍然兼容。
自动批处理(Automatic Batching):
React 18实现了自动批处理功能,即将多个状态更新分组到一个重新渲染中执行,以优化性能。
在React 18之前,只有在React事件回调中才会触发批量处理,而在Promise、setTimeout等原生事件处理程序中的更新是同步的。React 18中,所有状态更新都会自动使用批处理。
过渡和startTransition API:
React 18引入了startTransition API,允许开发者区分紧急和非紧急更新。
紧急更新(如打字、点击等)会立即执行,而非紧急更新(如数据加载)可以在浏览器空闲时执行,从而避免阻塞用户交互。
Suspense和流式SSR:
React 18增强了Suspense组件的功能,允许开发者在等待数据加载完成之前暂停渲染,直到数据加载完毕再恢复渲染。
支持流式SSR(服务器端渲染),允许服务端一点一点的返回页面,提高首次页面加载速度。
新的Hooks:
React 18增加了一些新的Hooks,如useId、useDeferredValue、useSyncExternalStore等,为开发者提供了更多的灵活性和选择。
useId用于支持同一个组件在客户端和服务端生成相同的唯一的ID,避免hydration的不兼容。
useDeferredValue可以延迟某些非紧急的状态更新,直到浏览器空闲时再进行。
性能优化和底层改进:
React 18采用了新的渲染引擎React Reconciler,提升了性能和可扩展性。
优化了服务器端渲染(SSR),通过“Streaming Server Renderer”技术,显著提高了首次页面加载速度。
这些新特性不仅提升了React应用的性能和用户体验,还改进了开发效率和代码质量。React 18是React框架的一个重要里程碑,为开发者提供了更多构建高性能Web应用的能力。

————————————————————————
React 18的并发渲染(Concurrent Rendering)是一个革命性的特性,它通过一系列技术和API的引入,改变了React应用的渲染方式,使得渲染过程更加高效且可控。并发渲染的核心原理在于将渲染任务拆分为多个可中断和可恢复的小任务,并根据优先级进行调度。以下是React 18并发渲染的一些具体实现方式:
1. Fiber架构
React 18使用Fiber架构来管理渲染任务。Fiber节点包含组件的类型、状态、props等信息,并且允许React在渲染过程中暂停和恢复。Fiber架构使用双端队列(work-in-progress tree 和 current tree)来管理渲染任务。当开始渲染时,React会从根节点开始,遍历组件树并创建Fiber节点。这些Fiber节点会被放入work-in-progress tree中,表示正在进行中的渲染任务。同时,current tree中保存着上一次渲染的结果,用于在渲染过程中进行比对和更新。
2. 时间切片(Time Slicing)
时间切片允许React将长时间的渲染任务拆分成多个较短的时间片,以避免阻塞主线程。React内部会自动管理时间切片,但开发者可以通过控制更新任务的优先级来间接影响时间切片的分配。例如,使用startTransition可以标记某些更新为非紧急更新,这些更新将在浏览器空闲时执行。
3. 更新优先级
并发渲染允许React在渲染过程中根据任务的优先级来动态调度。紧急更新(如用户交互)会优先处理,而非紧急更新(如数据加载)则可以在浏览器空闲时执行。这种优先级调度机制有助于提升应用的响应性和用户体验。
4. startTransition API
startTransition是React 18引入的一个新API,用于标记非紧急更新。通过startTransition包裹的更新操作会被放入一个待处理队列中,并标记为非紧急更新。这些更新将在浏览器空闲时执行,从而避免阻塞紧急更新和用户交互。
5. useTransition Hook
与startTransition类似,useTransition是一个Hook,用于在函数组件中处理过渡状态。它返回一个数组,其中包含了startTransition函数和一个状态变量(通常用于表示过渡状态是否正在进行)。开发者可以使用这个Hook来在组件内部控制过渡状态,并在过渡状态期间显示加载指示器等UI元素。
6. useDeferredValue Hook
useDeferredValue是React 18引入的另一个新Hook,用于推迟更新屏幕上不太重要的部分。它返回一个值,这个值在大多数情况下与传入的值相同,但在浏览器资源紧张时,React可能会使用之前的值来替代新值,从而避免不必要的渲染工作。这对于优化性能和提高用户体验非常有帮助。
7. Suspense和懒加载
虽然Suspense和懒加载本身并不是并发渲染的直接实现方式,但它们与并发渲染紧密相关。Suspense允许React在等待异步数据加载时暂停组件树的渲染,并在数据加载完成后恢复渲染。这种机制有助于提升应用的响应性和用户体验。同时,结合React 18的并发渲染特性,Suspense可以更加高效地处理数据加载和组件渲染过程。
综上所述,React 18的并发渲染通过Fiber架构、时间切片、更新优先级、startTransition API、useTransition Hook、useDeferredValue Hook以及Suspense和懒加载等技术和API的引入,实现了更加灵活和高效的渲染控制。这些新特性有助于提升React应用的性能和用户体验。

————————————————————————
React 18的并发渲染(Concurrent Rendering)是一个革命性的特性,它通过一系列技术和API的引入,改变了React应用的渲染方式,使得渲染过程更加高效且可控。并发渲染的核心原理在于将渲染任务拆分为多个可中断和可恢复的小任务,并根据优先级进行调度。以下是React 18并发渲染的一些具体实现方式:
1. Fiber架构
React 18使用Fiber架构来管理渲染任务。Fiber节点包含组件的类型、状态、props等信息,并且允许React在渲染过程中暂停和恢复。Fiber架构使用双端队列(work-in-progress tree 和 current tree)来管理渲染任务。当开始渲染时,React会从根节点开始,遍历组件树并创建Fiber节点。这些Fiber节点会被放入work-in-progress tree中,表示正在进行中的渲染任务。同时,current tree中保存着上一次渲染的结果,用于在渲染过程中进行比对和更新。
2. 时间切片(Time Slicing)
时间切片允许React将长时间的渲染任务拆分成多个较短的时间片,以避免阻塞主线程。React内部会自动管理时间切片,但开发者可以通过控制更新任务的优先级来间接影响时间切片的分配。例如,使用startTransition可以标记某些更新为非紧急更新,这些更新将在浏览器空闲时执行。
3. 更新优先级
并发渲染允许React在渲染过程中根据任务的优先级来动态调度。紧急更新(如用户交互)会优先处理,而非紧急更新(如数据加载)则可以在浏览器空闲时执行。这种优先级调度机制有助于提升应用的响应性和用户体验。
4. startTransition API
startTransition是React 18引入的一个新API,用于标记非紧急更新。通过startTransition包裹的更新操作会被放入一个待处理队列中,并标记为非紧急更新。这些更新将在浏览器空闲时执行,从而避免阻塞紧急更新和用户交互。
5. useTransition Hook
与startTransition类似,useTransition是一个Hook,用于在函数组件中处理过渡状态。它返回一个数组,其中包含了startTransition函数和一个状态变量(通常用于表示过渡状态是否正在进行)。开发者可以使用这个Hook来在组件内部控制过渡状态,并在过渡状态期间显示加载指示器等UI元素。
6. useDeferredValue Hook
useDeferredValue是React 18引入的另一个新Hook,用于推迟更新屏幕上不太重要的部分。它返回一个值,这个值在大多数情况下与传入的值相同,但在浏览器资源紧张时,React可能会使用之前的值来替代新值,从而避免不必要的渲染工作。这对于优化性能和提高用户体验非常有帮助。
7. Suspense和懒加载
虽然Suspense和懒加载本身并不是并发渲染的直接实现方式,但它们与并发渲染紧密相关。Suspense允许React在等待异步数据加载时暂停组件树的渲染,并在数据加载完成后恢复渲染。这种机制有助于提升应用的响应性和用户体验。同时,结合React 18的并发渲染特性,Suspense可以更加高效地处理数据加载和组件渲染过程。
综上所述,React 18的并发渲染通过Fiber架构、时间切片、更新优先级、startTransition API、useTransition Hook、useDeferredValue Hook以及Suspense和懒加载等技术和API的引入,实现了更加灵活和高效的渲染控制。这些新特性有助于提升React应用的性能和用户体验。

————————————————————————

React 18中引入了一些新的Hooks,这些Hooks为开发者提供了更多的功能和灵活性。以下是React 18中新增的Hooks:
useId:
这个Hook用于生成一个唯一的ID,这对于在客户端和服务器端渲染时保持ID的一致性非常有用。它特别适用于需要唯一标识符的场景,如HTML元素的ID属性,以确保在SSR(服务器端渲染)和CSR(客户端渲染)之间的一致性。
useDeferredValue:
这个Hook用于推迟非紧急的更新,以优化应用的响应性。当应用中有多个状态更新,且某些更新不是立即需要时,可以使用useDeferredValue来延迟这些更新,从而优先处理紧急的更新,如用户交互。
useTransition:
虽然useTransition本身不是一个Hook,但它与React 18中引入的并发特性紧密相关。useTransition是一个自定义Hook的示例,展示了如何结合startTransition API来标记非紧急更新,并管理过渡状态。它通常与startTransition一起使用,以在组件中处理过渡状态。
useSyncExternalStore:
这个Hook用于集成外部状态管理库,如Redux、MobX等。它允许这些库在React的并发模式下更高效地工作,通过提供一种机制来同步外部状态变化到React组件中。使用useSyncExternalStore可以减少不必要的渲染和提高性能。
useInsertionEffect:
这个Hook是React 18中实验性的,它提供了一种在DOM元素插入到DOM树中之后立即运行副作用的方法。它类似于useEffect,但执行时机更接近于DOM操作完成。然而,需要注意的是,useInsertionEffect目前仍处于实验阶段,可能在未来版本的React中发生变化或被移除。
useDebugValue:
这个Hook用于在React DevTools中显示自定义Hook的调试信息。它对于开发和调试复杂的自定义Hook非常有用,因为它允许开发者在DevTools中查看Hook的内部状态。然而,需要注意的是,useDebugValue并不会影响组件的渲染或行为,它仅仅是一个用于调试的工具。
useCache(注意:这不是React 18官方文档明确提及的新Hook,可能是社区实现或误解):
需要澄清的是,useCache并不是React 18官方引入的新Hook。React 18官方文档中没有提及这个Hook。它可能是由社区开发的一个自定义Hook,用于缓存计算结果或其他数据。然而,React 18中提供了useMemo等Hook来实现类似的缓存功能。
总结来说,React 18中新增的Hooks主要包括useId、useDeferredValue、useSyncExternalStore以及实验性的useInsertionEffect和用于调试的useDebugValue。这些Hooks为开发者提供了更多的功能和灵活性,有助于提升React应用的性能和用户体验。同时,需要注意的是,React 18的并发特性和新Hooks是基于Fiber架构实现的,它们共同构成了React 18中强大的渲染和控制能力。

 

相关文章:

React18新特性

React 18新特性详解如下: 并发渲染(Concurrent Rendering): React 18引入了并发渲染特性,允许React在等待异步操作(如数据获取)时暂停和恢复渲染,从而提供更平滑的用户体验。 通过时…...

汽车发动机系统EMS详细解析

汽车发动机系统EMS,全称Engine-Management-System(发动机管理系统),是现代汽车电子控制技术的重要组成部分。以下是对汽车发动机系统EMS的详细解析,涵盖其定义、工作原理、主要组成、功能特点、技术发展以及市场应用等…...

【社保通-注册安全分析报告-滑动验证加载不正常导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

初学Vue(2)

文章目录 监视属性 watch深度监视computed 和 watch 之间的区别 绑定样式(class style)条件渲染列表渲染基本列表key的原理列表过滤列表排序收集表单中的数据 v-model过滤器(Vue3已移除) 监视属性 watch 当被监视的属性变化时&am…...

ThinkPHP5基础入门

文章目录 ThinkPHP5基础入门一、引言二、环境搭建1、前期准备2、目录结构 三、快速上手1、创建模块2、编写控制器3、编写视图4、编写模型 四、调试与部署1、调试模式2、关闭调试模式3、隐藏入口文件 五、总结 ThinkPHP5基础入门 一、引言 ThinkPHP5 是一个基于 MVC 和面向对象…...

Metal 之旅之MTLLibrary

什么是MSL? MSL是Metal Shading Language 的简称,为了更好的在GPU执行程序,苹果公司定义了一套类C的语言(Metal Shading Language ),在GPU运行的程序都是用这个语言来编写的。 什么是MTLLibrary? .metal后缀的文件…...

第十二章 Redis短信登录实战(基于Session)

目录 一、User类 二、ThreadLocal类 三、用户业务逻辑接口 四、用户业务逻辑接口实现类 五、用户控制层 六、用户登录拦截器 七、拦截器配置类 八、隐藏敏感信息的代码调整 完整的项目资源共享地址,当中包含了代码、资源文件以及Nginx(Wi…...

华为OD机试 - 九宫格游戏(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...

Pytorch库中torch.normal()详解

torch.normal()用法 torch.normal()函数,用于生成符合正态分布(高斯分布)的随机数。在 PyTorch 中,这个函数通常用于生成 Tensor。 该函数共有四个方法: overload def normal(mean: Tensor, std: Tensor, *, generat…...

atcoder-374(a-e)

atcoder-374 文章目录 atcoder-374ABC简洁的写法正解 D正解 E A #include<bits/stdc.h>using namespace std;signed main() {string s;cin>>s;string strs.substr(s.size()-3);if(str "san") puts("Yes");else puts("No");return 0…...

idea2024设置中文

今天下载idea2024.2版本&#xff0c;发现已经装过中文插件&#xff0c;但是还是不显示中文&#xff0c;找了半天原来还需要设置中文选项 方案一 点击文件 -> 关闭项目 点击自定义 -> 选择语言 方案二 点击文件 -> 设置 外观与行为 -> 系统设置 -> 语言和地区…...

跨境电商独立站轮询收款问题

想必做跨境电商独立站的小伙伴&#xff0c;对于PayPal是再熟悉不过了&#xff0c;PayPal是一个跨国际贸易的支付平台&#xff0c;对于做独立站的朋友来说跨境收款绝大部分都是依赖PayPal以及Stripe条纹了。简单来说PayPal跟国内的支付宝有点类似&#xff0c;但是PayPal它是跨国…...

[OS] 3.Insert and Remove Kernel Module

Insert and Remove Kernel Module 1. 切换到 root 账户 $ sudo su作用&#xff1a;Linux 内核模块的加载和卸载需要超级用户权限&#xff0c;因此你必须以 root 用户身份进行操作。sudo su 命令允许你从普通用户切换到 root 账户&#xff0c;从而获得系统的最高权限&#xff…...

updatedb命令:更新locate数据库

一、命令简介 ​updatedb ​命令用于更新 locate ​命令使用的文件数据库&#xff0c;以便 locate ​命令能够快速定位文件。 ‍ 二、命令参数 命令格式 updatedb [选项]选项 ​-l​: 仅更新本地文件系统&#xff08;默认行为&#xff09;​-U​: 更新所有文件系统​-o D…...

分布式共识算法ZAB

文章目录 概述一、ZAB算法概述二、ZAB算法的核心特性三、ZAB算法的工作流程四、ZAB算法的优势与局限 其他共识算法 概述 分布式共识算法ZAB&#xff0c;全称Zookeeper Atomic Broadcast&#xff08;Zookeeper原子广播&#xff09;&#xff0c;是Zookeeper保证数据一致性的核心…...

程序化交易与非程序化交易者盈利能力孰优孰劣

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…...

【JavaEE】【多线程】进程与线程的概念

目录 进程系统管理进程系统操作进程进程控制块PCB关键属性cpu对进程的操作进程调度 线程线程与进程线程资源分配线程调度 线程与进程区别线程简单操作代码创建线程查看线程 进程 进程是操作系统对一个正在运行的程序的一种抽象&#xff0c;可以把进程看做程序的一次运行过程&a…...

LeetCode hot100---贪心算法专题(C++语言)

贪心算法 当前取最优&#xff0c;最终完成全局最优1、买卖股票的最佳时机 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。(2)输入输出描述&#xff1a; 输入&…...

《PyTorch深度学习快速入门教程》学习笔记(第15周)

目录 摘要 Abstract 1. 安装Anaconda 2. 查看显卡驱动 3. 安装Pytorch 4. Pytorch加载数据 5. 常用数据集两种形式 6. 路径直接加载数据 7. Dataset加载数据 摘要 本周报的目的在于汇报《PyTorch深度学习快速入门教程》课程第一周的学习成果&#xff0c;主要聚焦于py…...

kubeadm部署k8s1.28.0主从集群(cri-dockerd)

1. kubernetes集群规划 主机IP主机名主机配置角色192.168.100.3master12C/4G管理节点192.168.100.4node12C/4G工作节点192.168.100.5node22C/4G工作节点 2. 集群前期环境准备 &#xff08;1&#xff09;初始化脚本 #!/bin/bash echo "——>>> 关闭防火墙与SE…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...