news 2026/7/25 16:51:09

⚛️ React 17 vs React 18:Lanes 是同一个模型,但跑法不一样

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
⚛️ React 17 vs React 18:Lanes 是同一个模型,但跑法不一样

在 React 内部,每一次渲染任务都会给不同的更新分配一个“优先级”。
React 17 开始,Fiber 架构中引入了Lanes 模型(车道模型)——就像高速公路一样,不同类型的更新在不同车道上并行行驶,例如用户输入、网络请求、动画渲染等。
但到了 React 18,这条“高速公路”正式通车进入并发模式🚦。


🧩 1. Lanes 是什么鬼?
简单地说,Lanes 是比 ExpirationTime 更灵活的任务优先级系统

比喻技术解释
🚗 每辆车是一条状态更新(setState)Fiber 节点更新任务
🛣 每条车道是一个优先级(Lane)不同任务的调度优先级
🚧 交通规则是调度器(Scheduler)React Scheduler 控制何时执行哪个 Lane

👉 React 会把不同类型的更新放进不同的 Lane,
再根据优先级(priority)合并或分裂执行,达到灵活调度的目的。


⚙️ 2. React 17:有 Lanes,但没“通车” 🚧
在 React 17 中,Lanes 已经实现,但几乎全都在幕后运行
之所以引入它,是为了后续的并发特性(Concurrent Features)铺路。
React 17 的 Lane 更像是准备好的立交桥,但所有车还是走同一条慢车道。

React 17 的更新依然是同步阻塞式调和
当有一个组件要重新渲染时,React 不会停下来问“要不要暂停一下”,而是直接一路冲到底。

setState(value); // React 17: 同步、直接阻塞主线程

这意味着:

  • 高优先级任务(用户输入)不能中断低优先级任务;
  • 慢组件会拖垮整次更新;
  • “时间切片 (Time Slicing)” 概念还没真正启用。

⚡ 3. React 18:Lanes 真正开跑!并发启用 🚀
React 18 引入了并发渲染(Concurrent Rendering)
这让 Lanes 的作用正式显现:
“不同优先级的任务在不同车道上行驶,可以随时切换、暂停或恢复。”

🧠 核心机制
React 18 会根据更新类型分配不同的 Lane:

更新类型Lane Priority示例
🕹 用户交互(点击、输入)SyncLane(最高)onClick,onChange
⏱ 过渡更新(Transition)TransitionLanesstartTransition(() => setState(...))
💤 异步渲染(数据请求)DefaultLanes / Suspense加载数据的组件
🌙 空闲任务IdleLane后台预取

🧵 React 18 的执行流程:

  1. 用户调用一次setState
  2. React 分配一个 Lane(比如 “TransitionLane”)
  3. Scheduler 检查是否有更高优先级的更新在进行
  4. 如果有,暂停当前渲染(即“打断”)
  5. 等空闲时间再恢复渲染

这样,你在界面中快速输入时,不会被慢数据渲染卡顿所阻塞。
比如 👇

import { startTransition, useState } from "react"; function SearchApp() { const [query, setQuery] = useState(''); const [results, setResults] = useState([]); function handleInput(e) { const q = e.target.value; setQuery(q); // 👇 将结果更新标记为“过渡任务” startTransition(() => { setResults(expensiveSearch(q)); // 假设很耗时 }); } return ( <input value={query} onChange={handleInput} placeholder="输入以搜索..." /> ); }

🧩结果:

  • 输入框更新(高优先级)🚗💨 在 FAST LANE。
  • 搜索结果渲染(低优先级)🚙 在 SLOW LANE。
  • 用户体验——顺滑如丝🎐。

🔮 4. 同步 vs 并发:线程没变,调度变了
🧵并发渲染 ≠ 多线程
React 依然运行在单个 JS 线程,但通过分片调度 (time slicing)实现任务“让出时间”:

while (hasNextUnitOfWork && timeRemaining() > 1) { performUnitOfWork(nextUnitOfWork); }

每个 Fiber 更新称为一个 “Unit of Work”,
React 在执行过程中会不断检查是否该“让路”:

  • 浏览器要绘制?➡️ 暂停;
  • 用户有输入事件?➡️ 立即响应;
  • 主线程空闲?➡️ 继续渲染。

这种行为就像《疯狂动物城》里的闪电树懒 🦥 突然喝了几杯红牛——依旧顺序执行,但“懂得让路”。


🧮 5. React 17 vs 18 Lane 调度差异图

对比项React 17React 18
Lane 系统内部存在但未全面启用全量启用
并发渲染❌ 同步阻塞✅ 支持中断 / 恢复
Transition API❌ 无✅ startTransition 等
Scheduler 优先级静态分配动态分配,多级优先
更新协调单通道更新多车道分流更新

💬 6. 小结(带点哲学 🧘)
React 17 的 Fiber 是“多核 CPU”,但只开了一个核。
React 18 则是真正启用多调度通道的阶段。
换句话说,
“React 17 是火车:一列车厢接着一列;
React 18 是地铁:多条线路、分时发车、各行其道。”


🎯 结语:Lanes 是 React 哲学的具象化
React 一直追求的,不只是「更新界面快」,
而是「保证交互始终流畅」。
Lanes 让这种理念成为可能。
它让开发者像交通调度员一样,精确控制 UI 的优先级流量。
🚦 React 17:红灯。
🚀 React 18:绿灯亮起,全速前进。

原文: https://juejin.cn/post/75847303
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 7:34:43

可持续测试实践探索

可持续测试的时代背景与意义 在数字化浪潮席卷全球的今天&#xff0c;软件已成为社会运转的核心驱动力&#xff0c;但随之而来的能源消耗、电子废弃物和低效流程也对环境与社会构成了挑战。根据行业数据&#xff0c;全球IT部门的碳排放占总量约2-4%&#xff0c;而低质量软件导…

作者头像 李华
网站建设 2026/7/20 13:52:31

「安卓开发辅助工具按键精灵」xml全分辨率插件jsd插件脚本教程

在处理界面上文字提取的问题&#xff0c;我通常会选择使用jsd插件&#xff0c;感觉用起来挺方便&#xff0c;以往在使用jsd插件的时候就是按照命令提供例子的方法直接使用&#xff0c;这次想自己分析一下每个命令。 jsd插件主要是对节点的处理&#xff0c;我也只分析和节点相关…

作者头像 李华
网站建设 2026/7/23 6:04:47

代码复现:LEARNING FAST AND SLOW FORONLINE TIME SERIES FORECASTING

基于上一篇文章文献阅读&#xff1a;LEARNING FAST AND SLOW FORONLINE TIME SERIES FORECASTING-CSDN博客过后&#xff0c;这里去根据论文中的代码仓库进行了一个实验。尊重原创代码&#xff1a;GitHub - DMIRLAB-Group/LSTD 问题 这里发现给的配置文件不是很全面&#xff0c…

作者头像 李华
网站建设 2026/7/25 6:10:41

密码管理器:单主密码管所有,是便捷福音还是风险陷阱?

在数字时代&#xff0c;每个人的生活都被密密麻麻的账号密码包裹&#xff1a;社交软件、购物平台、办公系统、金融账户……为了安全&#xff0c;我们被反复提醒“不要重复使用密码”“密码需包含大小写字母、数字和特殊符号”&#xff1b;可为了记忆&#xff0c;不少人又不得不…

作者头像 李华
网站建设 2026/7/25 13:46:59

T113 logo g2d 旋转

文章目录1、环境介绍2、前言3、内核设备树配置4、内核配置5、uboot 设备树配置6、验证7、参考文章8、总结1、环境介绍 硬件&#xff1a;小智 T113 板卡 软件&#xff1a;原厂 Tina5.0 SDK v1.2&#xff08;Buildroot&#xff09; 2、前言 我目前使用的屏幕分辨率是280*1424…

作者头像 李华
网站建设 2026/7/25 13:25:56

Java程序员转AI大模型:拒绝内卷,用技术沉淀换职业新赛道

当Java开发的岗位竞争进入“内卷”模式&#xff0c;AI大模型的爆发恰好为你打开了职业突破口。你不必担心多年积累的Spring Boot、微服务经验付诸东流——企业级开发锤炼的工程化思维、系统稳定性把控能力&#xff0c;正是大模型从实验室走向生产的“刚需能力”。转型AI大模型&…

作者头像 李华