并发渲染(concurrent rendering)

当然你也可以选择性的使用 React18 的一些新功能,React18 加入了一个主要的可选机制,“并发渲染(concurrent rendering)”,这个是很多新功能的基础。

值得注意的是这里的“并发”使用的依旧是单线程。但是这个单线程可以被中断的。因此渲染可以在多个渲染任务之间交错进行,如用户交互,网络请求,计时器,动画和浏览器布局/绘制等等。

它的主要工作分配大致如下:

当渲染任务遭遇到更高级的渲染任务时将会被中断,然后优先执行优先级更高的任务,再任务完成之后,再回到原来的渲染任务上。

你可以通过一下一些新的 API 来告诉 React 哪些是优先级较高的任务。

1、startTransition

2、useDeferredValue

3、SuspenseList

startTransition 过渡更新

这是一个比较好理解的 API,通过使用 startTransition 来包裹一些 setState,声明他们是比较不重要的渲染行为。比如官方的例子里面提到的搜索场景。

当用户在搜索框中输入时,搜索框需要实时的显示用户的输入字符,然后通过网络请求(或者本地过滤数据),获取到新的列表数据,再更新列表。这里面会有两个 setState,一个是 input 的 value 绑定。一个是搜索之后的页面数据绑定。

import { startTransition } from 'react';// 紧急:显示输入的内容
setInputValue(input);// 将内部的任何状态更新标记为转换
startTransition(() => {// Transition: 显示结果setSearchQuery(input);
});

如果你需要在等待过渡渲染的时候执行一些表现,如 loading 操作之类的。

你可以使用 useTransition。

import { useTransition } from 'react';const [isPending , startTransition] = useTransition();
startTransition(() => {// Transition: 显示结果setSearchQuery(input);
});{ isPending  &&  < Spinner /> }

useDeferredValue

推迟更新屏幕上不太重要的部分(这个还没有放出来文档)。

SuspenseList

协调加载指示器出现的顺序(这个还没有放出来文档)。

但是从 Suspense 的用法来看,预计与懒加载的优先级有关,可能是指定哪些加载优先执行。

// 该组件是动态加载的
const OtherComponent = React.lazy(() => import('./OtherComponent'));function MyComponent() {return (// 显示 <Spinner> 组件直至 OtherComponent 加载完成<React.Suspense fallback={<Spinner />}><div><OtherComponent /></div></React.Suspense>);
}

什么,react18都来啦,不敢相信,react17都还没捂热,18突然就来了,没有一点点防备,就是这么惊喜,react官网已经放出react18的介绍了,还是不信的话,你点点链接瞧瞧官宣介绍吧!

react18并发渲染相关推荐

  1. 《坦克世界》* 使用并发渲染提升多核性能

    Wargaming.net与英特尔合作开发并发渲染支持,以支持<坦克世界> (WoT) 引擎在所有可用的 CPU 内核上同时渲染数据,并将数据更快地发送至 GPU.从而将平均每秒帧数 (F ...

  2. React 并发渲染的前世今生

    大家好,我是 ConardLi. 2161 天! 这是 React 团队从计划为 React 增加 并发渲染 的能力,到 React 18 可用版本发布所花费的时间. 为啥中间花费了这么长的时间?中间 ...

  3. 「原理篇」你真的了解 React18 的并发吗?

    前言 前阵子,打磨已久的React18终于正式发布,其中最重要的一个更新就是并发(concurrency).其他的新特性如Suspense.useTransition.useDeferredValue ...

  4. pyqt创建窗口没有句柄_Filament 渲染引擎剖析 之 FrameGraph 1 虚拟资源的定义与创建...

    Filament 使用了可扩展渲染管线(FrameGraph)来组织渲染通道和管理渲染资源,网上也搜了下可扩展渲染管线的相关的文章,一般认为可扩展渲染管线是次时代渲染引擎应该具备的比较先进的管线组织架 ...

  5. Splash 渲染引擎简介

    Splash文档地址:http://splash.readthedocs.io/en/latest/api.html Splash渲染引擎有以下功能 1.为用户返回经过渲染的HTML页面或页面截图 2 ...

  6. Scrapy 爬虫框架四 —— 动态网页及其 Splash 渲染

    一.前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送给我 ...

  7. Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】

    (1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...

  8. Filament 渲染引擎剖析 之 FrameGraph 1 虚拟资源的定义与创建

    Filament 使用了可扩展渲染管线(FrameGraph)来组织渲染通道和管理渲染资源,网上也搜了下可扩展渲染管线的相关的文章,一般认为可扩展渲染管线是次时代渲染引擎应该具备的比较先进的管线组织架 ...

  9. 超级计算机 实时渲染,基于国产超级计算机的渲染农场的设计与开发

    摘要: 随着影视产业的快速发展,电影的画面正变得越来越绚丽,逼真.但是有很多的电影画面无法通过正常的拍摄完成,只能通过后期的建模,特效制作,渲染来完成.电影分辨率的提高带来的单帧渲染时间的增长,以普通 ...

最新文章

  1. shell中十种实现自加的方法
  2. pyplot绘图标题错误处理
  3. 包区别 版本_详解Linux下二进制包、源代码包、rpm包区别与联系
  4. iOS开发ARC内存管理技术要点
  5. CUBA平台:TypeScript SDK和REST API
  6. 关于统计时间切片标签的一些sql
  7. L2-026 小字辈-PAT团体程序设计天梯赛GPLT
  8. 《Python语言程序设计》——1.3 程序设计语言
  9. python 分页插件
  10. split-lapply-cbind模式--R语言
  11. 计算机应用数学自考,计算机应用数学-补充题16年自考复习资料
  12. 怎么安装消息队列服务器,安装和配置消息队列(针对存档服务器)
  13. JavaScript基础系列之一 快速入门
  14. USB转换PS2接线原理
  15. R-FCN论文解读及难点理解
  16. Docker fille实例讲解
  17. 初学,用python获取B站视频
  18. 关于 Kubernetes中deployment的一些笔记
  19. TP-link WR740N 升级版本备忘
  20. php获取上级绝对目录路径

热门文章

  1. Linux 内核中用 GFP_ATOMIC 申请内存究竟意味着什么?
  2. @所有技术人,快来翻开属于你的2021定制日历!
  3. “鲲鹏新时代、中原更出彩” 2020数字经济峰会暨黄河鲲鹏生态发展大会召开
  4. 中国首个开源基金会来了
  5. V神演讲干货全送上!关于以太坊2.0,你想知道的都在这里!
  6. 迁移学习实战 | 快速训练残差网络 ResNet-101,完成图像分类与预测,精度高达 98%!...
  7. 病毒详解及批处理病毒制作:自启动、修改密码、定时关机、蓝屏、进程关闭...
  8. 苹果三星手机被诉辐射超标;淘集集启动破产清算;Drupal 8.8.0 发布 | 极客头条...
  9. 今天,Java 12 正式发布了!
  10. 开源图数据库项目 DGraph 的前世今生 | 技术头条