您的位置:首页 >资讯 >

理解 React 18 的“并发特性”,就这么简单

2023-05-28 17:52:56    来源:程序猿阿嘴

首发于公众号 前端从进阶到入院,欢迎关注。

React v18.0 引入了一项期待已久的新功能—— 并发模式 !

不幸的是,尽管有大量的资源解释 如何使用它 ,但解释 它如何工作 的资源却不太充足。


(相关资料图)

由于这是一个底层特性,理解 React 关于并发的概念并不是必须的,但也无妨!

这篇文章并不试图全面介绍 React 的并发 API 和最佳实践。最好结合链接在这里的 React 文档页面阅读。

什么是 React 并发模式?

React 并发的基本原理是重构渲染过程,使 在渲染下一个视图时,当前视图保持响应性 。

并发模式是 React 团队提升应用性能的一个提案。它的想法是将渲染过程分成可中断的工作单元。

在幕后,这将通过在 requestIdleCallback() 调用中包装组件渲染来实现,让应用在渲染过程中保持响应性。

所以,如果将类似如下的“阻塞模式”实现:

scss复制代码function renderBlocking(Component) {    for (let Child of Component) {        renderBlocking(Child);    }}

那么将会这样实现“并发模式”:

scss复制代码function renderConcurrent(Component) {    // 如果状态已经过时,打断渲染进程    if (isCancelled) return;    for (let Child of Component) {        // 等待浏览器不忙(没有要处理的输入)        requestIdleCallback(() =>renderConcurrent(Child));    }}

阅读这篇实践指南:如何避免阻塞事件循环,以了解为什么这可以使应用程序保持响应!

如果你好奇 React 实际上如何做到这一点,请看看 React 的 scheduler 包的实现。在最初使用 requestIdleCallback 之后,React 切换到了 requestAnimationFrame ,之后又切换到了用户空间计时器。

没有模式,只有特性

由于向后兼容性的原因, 并发模式 并没有实现。

相反,React 团队转向了 并发特性 ,一组新的 API,用于选择性地启用并发渲染。到目前为止,React 已经引入了两个新的 hook 来实现并发渲染。

useTransition

useTransition hook 返回两个元素:

布尔标志 isPending ,如果并发渲染正在进行则为 true 函数 startTransition ,用于分发一个新的并发渲染

为了使用它,请在 setState 调用中使用 startTransition 回调。

javascript复制代码function MyCounter() {    const [isPending, startTransition] = useTransition();    const [count, setCount] = useState(0);    const increment = useCallback(() =>{        startTransition(() =>{            // 并发运行这个更新操作            setCount(count =>count + 1);        });    }, []);    return (        <>{isPending ? \"Pending\" : \"Not Pending\"}            // 受益于并发特性的组件            )}

试试看:

译者注:这里其实有 200 多个 Input 框,在 Non-Transition 的情况下,点击 Count 按钮后会感觉到 UI 界面明显有卡顿,而 Transition 模式则非常流畅。

从概念上讲,状态更新检测它们是否被包装在 startTransition 中,以决定是安排阻塞渲染还是并发渲染。

ini复制代码function startTransition(stateUpdates) {  isInsideTransition = true;  stateUpdates();  isInsideTransition = false;}function setState() {  if (isInsideTransition) {    // 安排并发渲染  } else {    // 安排阻塞渲染  }}

useTransition 的一个重要警告是,它不能用于受控输入。对于这些情况,最好使用 useDeferredValue 。

useDeferredValue

useDeferredValue hook 是一个便捷的 hook,适用于你没有机会将状态更新包装在 startTransition 中,但仍希望并发运行更新的情况。

其中一个例子是,子组件从父组件接收一个新值。

从概念上看, useDeferredValue 是一个防抖动效果,可以实现如下:

scss复制代码function useDeferredValue(value: T) {    const [isPending, startTransition] = useTransition();    const [state, setState] = useState(value);    useEffect(() =>{        // 当输入更改时,分发并发渲染        startTransition(() =>{            setState(value);        });    }, [value])    return state;}

它的使用方式与输入防抖动 hook 相同:

javascript复制代码function Child({ value }) {    const deferredValue = useDeferredValue(value);    // ...}

并发特性和 Suspense

useTransition 和 useDeferredValue hook 除了可选择启用并发渲染之外,还有一个作用是等待 Suspense 组件完成。

有关 Suspense 及其角色的主题,将在未来的文章中介绍。关注我可以第一时间了解。

原文:www.bbss.dev/posts/react…

标签:

相关阅读

全球热推荐:begin的现在分词_begin的现在分词是什么

当前动态:找工作要小心“求职陷阱” 警方提示:警惕套路与骗局

小型计算机是指(小型计算机)|环球观焦点

邮政银行定期存款取出需要身份证吗 官方答案如下

经济日报:“负首付”看似馅饼实为陷阱_世界热推荐

出师表拼音版全文翻译_出师表拼音版全文

小米14 Pro和红米K60 Ultra均传出外观图,谁更值得期待?_全球热点

关爱自闭症儿童,让我们与爱同行~|环球观焦点

当前视讯!十大奇迹mu私服手游合集 最火的奇迹mu私服手游排行榜

《战地2042》精英版现身PlayStation商店 售价100美元|环球观天下

观天下!《暗黑破坏神4》无剧透评测与全面评测解禁时间公布

环球速看:李诞脱口秀节目叫什么(李诞脱口秀节目有哪些)

《勇者斗恶龙怪兽篇》系列25周年NS新作开发中

超自然架空历史战略新作[REDACTED]将于月底公布

新疆阿雅克库木湖夏日美景_天天消息

cs交易平台app是真的假的 最便宜csgo其他饰品交易平台排名

世界播报:《逃生:试炼》首周销量超50万份 Steam“特别好评”

全球最资讯丨石器时代农场模拟《帕夏时代》重新上架Steam

全球csgo饰品交易平台是合法的吗 真实可靠的csgo饰品交易平台钥匙介绍

饰品交易平台csgo哪个好 五大csgo饰品交易平台推荐

速看:北京宇信易诚网络技术有限公司_北京宇信易诚

世界新资讯:“十问十答”了解长护险亲情照护服务

《魔戒:咕噜》开发商还在开发另一款《魔戒》新作_天天快播

韩国电子竞技协会局长 要应对杭州亚运会的不公正待遇|天天速递

当前快看:csgo饰品低价交易平台哪个优惠 即开即取csgo武器饰品交易平台推荐

csgo皮肤交易平台网址 最专业csgo主要饰品交易平台合集

csgo主要饰品交易平台可信吗 八大csgo饰品交易平台国际大全

当前看点!csgo官方承认的开箱平台真实吗 最划算外国csgo饰品交易平台大全

《辐射》开发血泪史:被轻视后创造奇迹 换来加班扣奖金_微资讯

全球焦点!老csgo饰品交易平台有哪些 最热门csgo英国饰品交易平台排行榜

50岁老妈送什么礼物好_老妈50岁送的礼物|世界视讯

塞尔达传说王国之泪奥克诺湾附近的洞窟魔犹伊的遗失物视频攻略-焦点观察

蛋仔派对小飞船舟舟盲盒值得抽么 小飞船舟舟盲盒内容介绍

天天即时:超变传奇手游哪个最火 十大热门超变传奇手游盘点2023

资讯推荐:塞尔达传说王国之泪乌奥谷的洞窟魔犹伊的遗失物视频攻略

塞尔达传说王国之泪泡泡山高地的遗迹窟魔犹伊的遗失物视频攻略|全球短讯

塞尔达传说王国之泪乌洛克海岸角崖下的洞窟魔犹伊的遗失物视频攻略-环球新视野

世界热资讯!崩坏星穹铁道黑塔6个调查机器人在哪 黑塔6个调查机器人位置介绍

塞尔达传说王国之泪拉纳湖的洞窟魔犹伊的遗失物视频攻略|环球观天下

任天堂祭出数字千年版权法 海豚模拟器Steam下架

有哪些好玩的单职业传奇 十大高人气单职业传奇手游盘点 最新快讯

原神扩散卡组怎么搭配 扩散卡组玩法攻略-每日热议

全球聚焦:“组团”操纵市场辩称“市值管理” 新美星董事长等5人被罚没近亿

6月6日发售!《暗黑破坏神4》中文预告:蔡依林化身恶魔莉莉丝-世界即时

《真人快打1》压力测试细节公布 现已接受注册申请

塞尔达传说王国之泪初始台地山脚的洞窟魔犹伊的遗失物视频攻略

塞尔达传说王国之泪依盖队玛丽塔支部魔犹伊的遗失物视频攻略

塞尔达传说王国之泪复苏神庙魔犹伊的遗失物视频攻略-世界热消息

天天滚动:《合金装备大师合集Vol.1》确认将包含初代两部原作

抢劫游戏新作《Fairgames》封测注册渠道悄然开启 环球新要闻

《街头霸王6》桑吉尔夫角色指南 6月2日发售-世界观焦点

天天看点:csgo英国饰品交易平台好不好 最专业cs交易平台app介绍

环球观察:塞尔达传说王国之泪萨托利山山脚的洞窟魔犹伊的遗失物视频攻略

csgo网上开箱网址 最划算csgo饰品交易平台介绍

塞尔达传说王国之泪北海拉鲁平原的洞窟魔犹伊的遗失物视频攻略

《最终幻想16》有奖预购促销 有机会与吉田直树面对面

每日热议!25岁研究生逝世后捐献器官,妹妹:他舍不得买贵支架,导致腿部血栓转移到肺部

《暗黑4》《芭比》足控联动?开发者推特引热议 环球快讯

顽皮狗声明介绍TLOU多人现状 称正在开发单机游戏新作

世界观点:csgo英国饰品交易平台哪个优惠 最热门交易平台csgo饰品排名

【独家焦点】泰坦回归!《命运2》深渊赛季推全新副本开启水下深渊探险

环球微速讯:魔戒咕噜全流程通关视频攻略

观焦点:传闻:索尼Project Q掌机电池续航3到4个小时

全球实时:塞尔达传说王国之泪卓拉台地顶端的洞窟魔犹伊的遗失物视频攻略

《巫师》真人剧第五季续订 第三季6月29日开播

全球速递!全球csgo饰品交易平台哪个优惠 真实可靠的csgo饰品交易平台c5排行

老csgo饰品交易平台官网 真实可靠的csgo饰品低价交易平台排名_当前视讯

csgo饰品交易平台外服在哪 即开即取饰品交易平台csgo排名

环球微头条丨csgo盲盒开箱平台哪个便宜 最热门csgo饰品交易平台合集

《我的世界》1.20版本大更新确认将于6月7日上线 天天滚动

塞尔达传说王国之泪欧兰桥边的洞窟魔犹伊的遗失物视频攻略

骑马与砍杀风云三国2.8作弊加属性(骑马与砍杀风云三国2 7 6怎么使用作弊商店) 全球报资讯

快资讯丨全球csgo饰品交易平台有哪些 最安全csgo特殊饰品交易平台介绍

塞尔达传说王国之泪卓拉领地地下的洞窟魔犹伊的遗失物视频攻略 每日热文

卡通风射击端游新作《第二波》今日开启Steam阿尔法测试

csgo饰品交易平台+国际哪个划算 最专业cs交易平台app推荐 环球焦点

《战地2042》第五赛季“新黎明”6月7日上线 带来新地图和热成像

传《最后的生还者》多人游戏规模缩减 未能通过Bungie的评估_世界观察

《鬼谷八荒》1.0正式版上线 DLC限时免费领 天天视点

csgo钥匙购买平台在哪 最优惠csgo饰品交易平台nft一览

为什么有糠秕孢子菌_为什么会得糠秕孢子菌

世界微速讯:《魔戒:咕噜》口碑翻车 开发商向玩家道歉

MMORPG《黑色沙漠》公开全新地区“晨曦之国”介绍视频 6月更新

科乐美开设《心跳回忆》系列30周年纪念推特账号-即时看

顽皮狗表示《最后生还者》多人游戏开发需要更久

万代南梦宫分享《刀剑神域:异绊集结》“系统”预告片

快讯:各省居民养老金上涨标准2023 基础养老金上涨多少?

魔兽团长兼指挥?20年MMO骨灰玩家?《命运方舟》负责人怎么看MMO 天天简讯

世界微头条丨暗黑类新品网游,STEAM最热门新品,却从10万在线到被迫下架!

暴雪发长文为《魔兽世界》欧美服上时光徽章辩解 环球最新

图集|海上牧歌:川观新闻记者带你打卡海洋牧场_世界信息

热点!电脑大型单机游戏下载 电脑单机游戏排行榜大全 大型单机游戏推荐

《前线任务2:重制版》NS版宣布延期 预计今年Q3发售 当前聚焦

官方证实:《合金装备3RE》Snake剧情和配音与原版相同_天天资讯

米哈游邮箱怎么换绑 改绑邮箱方法详情 热门看点

第十一联冠军赛前瞻:新的冠军即将诞生 环球热消息

《70亿人》怎么双星通关 全关卡双星通关攻略

环球看热讯:碧蓝档案官方网站入口 ios中文安卓下载

5月26日基金净值:民生加银成长优选股票最新净值0.7364,涨2.28%

天天微头条丨设计构思是什么意思(什么是设计构思)

长春市辛屯村:道德评议会“议”出文明风 “评”出正能量

2023天津格瑞艾特供热站采暖费线上缴纳入口+流程

天天最资讯丨宗喀巴大师弟子都是谁_宗喀巴大师

环球热推荐:9.99万起,全新外观设计!风行T5 EVO狂飚版正式上市

300年特产重现活力 广西西林升级打造“品牌鸭”

《逍遥情缘》手游仙灵骑宠那么多 哪个是你最喜爱的?

《逍遥情缘》手游升级永不停歇!教你一个方法,睡大觉也能拿经验|今亮点

世界视点!《伊苏10》公开新CM预告 展示海战系统