React 19.2.0 发布
React 19.2.0 现已发布,具体更新内容如下:
React 的新功能
<Activity />
<Activity>允许你将应用程序拆分为“活动”,这些活动可以被控制和优先排序。你可以使用 Activity 作为有条件地渲染应用程序部分的替代方法:
// Before
{isVisible && <Page />}
// After
<Activity mode={isVisible ? 'visible' : 'hidden'}>
<Page />
</Activity>
在 React 19.2 中,Activity 支持两种模式:visible和hidden。
hidden:隐藏子项,卸载效果,并推迟所有更新,直到 React 没有剩余工作可做。visible:显示子项、安装效果并允许正常处理更新。
这意味着你可以预渲染并继续渲染应用程序的隐藏部分,而不会影响屏幕上可见内容的性能。可以使用 Activity 来渲染应用中用户接下来可能导航到的隐藏部分,或者保存用户导航离开的部分的状态。这有助于通过在后台加载数据、CSS 和图片来加快导航速度,并允许返回导航保留输入字段等状态。
将来,开发团队计划为 Activity 添加更多模式以适应不同的用例。
有关如何使用 Activity 的示例,可查看Activity 文档。
useEffectEvent
使用 useEffect 时,一个常见的模式是通知应用程序代码关于来自外部系统的某种“事件”。例如,当聊天室连接时,你可能希望显示一个通知:
function ChatRoom({ roomId, theme }) {
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.on('connected', () => {
showNotification('Connected!', theme);
});
connection.connect();
return () => {
connection.disconnect()
};
}, [roomId, theme]);
// ...
上述代码的问题在于,任何在这样的“事件”中使用的值的更改都会导致周围 Effect 重新运行。例如,更改 theme 会导致聊天室重新连接。对于与 Effect 逻辑本身相关的值(如 roomId)来说,这很合理,但对于 theme 来说则不合理。
为了解决这个问题,大多数用户只是禁用 lint 规则并排除依赖项。但这可能导致错误,因为如果以后需要更新 Effect,linter 就无法帮助你保持依赖项的更新。
使用 useEffectEvent,你可以将这种逻辑的“事件”部分从发出它的 Effect 中分离出来:
function ChatRoom({ roomId, theme }) {
const onConnected = useEffectEvent(() => {
showNotification('Connected!', theme);
});
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.on('connected', () => {
onConnected();
});
connection.connect();
return () => connection.disconnect();
}, [roomId]); // ✅ All dependencies declared (Effect Events aren't dependencies)
// ...
与 DOM 事件类似,Effect 事件总是“看到”最新的 props 和 state。
Effect 事件不应声明在依赖数组中。你需要升级到 eslint-plugin-react-hooks@6.1.1,以便 linter 不会尝试将其作为依赖项插入。请注意,Effect 事件只能在同一组件或 Hook 中声明“它们”的 Effect。这些限制由 linter 验证。
cacheSignal
cacheSignal仅适用于React Server Components。
cacheSignal让你知道cache()生命周期何时结束:
import {cache, cacheSignal} from 'react';
const dedupedFetch = cache(fetch);
async function Component() {
await dedupedFetch(url, { signal: cacheSignal() });
}
这允许你在结果不再用于缓存时清理或中止工作,例如:
- React 已成功完成渲染
- 渲染已中止
- 渲染失败
欲了解更多信息,参阅cacheSignal文档。
Performance Tracks
React 19.2 为 Chrome DevTools 性能配置文件添加了一组新的自定义轨道,以提供有关 React 应用程序性能的更多信息:
React Performance Tracks 文档解释了轨道中包含的所有内容。
调度器
调度器跟踪显示 React 在不同优先级下正在做什么,例如“阻塞”用于用户交互,或“过渡”用于 startTransition 内的更新。在每个跟踪中,你会看到正在进行的工作类型,例如安排更新的事件,以及该更新的渲染发生的时间。
还显示信息,例如当更新因等待不同优先级而被阻塞,或者当 React 在继续之前等待绘制时。调度器跟踪帮助你理解 React 如何将你的代码拆分为不同的优先级,以及完成工作的顺序。
参阅 Scheduler track 文档以了解所包含的所有内容。
组件
组件跟踪显示 React 正在处理的组件树,无论是为了渲染还是运行效果。在里面,你会看到诸如“Mount”标签,表示子组件挂载或效果挂载,或者“Blocked”标签,表示由于让步给 React 外部的工作而阻止渲染。
组件跟踪帮助你了解组件何时被渲染或运行效果,以及完成该工作的所需时间,以帮助识别性能问题。
参阅组件轨道文档以查看包含的所有内容。
React DOM 的新功能
部分预渲染
在 19.2 中新增了一个能力,可以在提前渲染应用的一部分,然后稍后恢复渲染。这个功能称为“部分预渲染”,允许你预先渲染应用的静态部分并从 CDN 提供,然后稍后恢复渲染外壳以填充动态内容。
要预渲染一个稍后可恢复的应用,首先调用 prerender 并传入一个 AbortController:
const {prelude, postponed} = await prerender(<App />, {
signal: controller.signal,
});
// Save the postponed state for later
await savePostponedState(postponed);
// Send prelude to client or CDN.
然后,可以将preludeshell 返回给客户端,稍后调用resume“resume”到 SSR 流:
const postponed = await getPostponedState(request);
const resumeStream = await resume(<App />, postponed);
// Send stream to client.
或者可以调用resumeAndPrerenderresume 来获取 SSG 的静态 HTML:
const postponedState = await getPostponedState(request);
const { prelude } = await resumeAndPrerender(<App />, postponedState);
// Send complete HTML prelude to CDN.
有关更多信息,参阅新 API 的文档:
react-dom/serverresume:用于 Web 流。resumeToPipeableStream用于 Node 流。
react-dom/staticresumeAndPrerender用于 Web 流。resumeAndPrerenderToNodeStream用于 Node 流。
此外,预渲染 API 现在返回一个postpone状态以传递给resumeAPI。
显著变化
SSR 中的 Suspense 边界批处理
修复了一个行为性错误,该错误导致 Suspense 边界会根据是在客户端渲染还是从服务器端渲染流式传输而显示不同的内容。从 19.2 开始,React 将在短时间内批量显示服务器渲染的 Suspense 边界,以允许更多内容一起显示并与客户端渲染的行为保持一致。
以前,在流式传输服务器端渲染期间,Suspense 内容会立即替换后备内容。
在 React 19.2 中,Suspense 边界会在短时间内进行批处理,以允许一起揭示更多内容。
此修复还为支持 SSR 中的 <ViewTransition> 准备了应用程序。通过一起揭示更多内容,动画可以在更大的内容批次中运行,并避免链式动画内容流接近在一起。
注意:React 使用启发式方法来确保节流不会影响核心网页指标和搜索排名。例如,如果页面总加载时间接近 2.5 秒(这是被认为是 LCP 的“良好”时间),React 将停止批处理并立即揭示内容,以确保节流不会成为错过指标的原因。
SSR:Node 的 Web Streams 支持
React 19.2 增加了对 Web Streams 的支持,用于在 Node.js 中流式传输 SSR:
renderToReadableStream现在可用于 Node.jsprerender现在可用于 Node.js
以及新的resumeAPI:
resume适用于 Node.js。resumeAndPrerender适用于 Node.js。
在 Node.js 中优先使用 Node Streams 进行服务器端渲染
在 Node.js 环境中,官方仍然强烈建议使用 Node Streams API:
这是因为 Node Streams 比 Node 中的 Web Streams 快得多,并且 Web Streams 默认不支持压缩,导致用户意外错过了流式传输的好处。
eslint-plugin-react-hooksv6
还发布了eslint-plugin-react-hooks@6.1.1,默认情况下在 recommended 预设中使用扁平配置,并为新的 React 编译器驱动规则启用选择加入。
要继续使用旧配置,可以更改为recommended-legacy:
- extends: ['plugin:react-hooks/recommended']
+ extends: ['plugin:react-hooks/recommended-legacy']
查看eslint-plugin-react-hooks 变更日志以获取完整的变更列表。
更新默认useId前缀
在 19.2 中,将默认useId前缀从:r:(19.0.0) 或«r»(19.1.0) 更新为_r_。
变更日志
其他显著变化
值得注意的错误修复
react:将上下文字符串化为“SomeContext”而不是“SomeContext.Provider” #33507react:修复 popstate 事件中的无限 useDeferredValue 循环#32821react:修复将初始值传递给 useDeferredValue 时出现的错误#34376react:修复提交带有 Client Actions 的表单时的崩溃问题#33055react:如果 dehydrated suspense boundaries 重新暂停,则隐藏/显示其内容 #32900react:避免热重载期间宽树上的堆栈溢出#34145react:改进各处的组件堆栈#33629、#33724、#32735、#33723react:修复 React.lazy-ed 组件中 React.use 的一个错误#33941react-dom:使用 ARIA 1.3 属性时停止警告#34264react-dom:修复 Suspense fallbacks 中深度嵌套 Suspense 的错误#33467react-dom:在渲染过程中发生中止后进行挂起操作时,避免出现卡顿现象#34192
有关更改的完整列表,可参阅变更日志。
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Dante Cloud 3.5.6.2 发布,国内首个支持阻塞式和响应式融合的微服务
[一] 项目简介 Dante Cloud 国内首个支持阻塞式和响应式服务并行的、开箱即用的企业级云原生微服务基座。是采用领域驱动模型(DDD)设计思想,以「高质量代码、低安全漏洞」为核心,基于 Spring 生态全域开源技术,高度模块化和组件化设计,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求,支持接口国密数字信封加解密等一系列安全体系的一站式多租户微服务解决方案。独创的可以“一套代码实现微服务和单体两种架构灵活切换”的企业级应用系统。 一、项目理念 Dante Cloud 一直秉承着“简洁、高效、包容、务实”的理念,使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,不断地深耕细作、去粗取精、用心打造。目标是构建一款代码质量高、维护投入低、安全防护强的微服务基座,可以帮助用户快速跨越架构技术选型、技术研究探索、基础架构搭建阶段,直接聚焦业务开发。极大地降低传统项目中因安全漏洞、技术负债、低质代码等潜在隐患所产生的高维护投入。期望像项目名字寓意一样,构建一套可以在在行业变革的时期承上启下,助力企业信息化建设和数字化转型的产品。 Dante Cloud 核心关注点是:...
-
下一篇
开源鸿蒙2025年度技术课题发布,产学研协同攻坚核心领域
9月27日,在长沙国际会议中心举办的开源鸿蒙技术大会2025上,开源鸿蒙项目群技术指导委员会集中展示了年度课题的最新进展,发布新一批关键技术年度课题,并举行了隆重的颁奖与揭榜仪式。来自全国的专家学者、高校教师和产业代表齐聚一堂,共同见证开源鸿蒙在科研攻关与生态共建上的又一阶段性成果。 课题牵引科研攻坚,共建机制成效显著 长期以来,开源鸿蒙持续通过发布终端操作系统技术课题,引导学术界和产业界聚焦行业关键难题,推动技术创新与产业落地。自机制建立以来,课题体系已逐步形成良性循环。累计发布60余项年度课题,24家高校技术俱乐部先后揭榜61次,覆盖52个细分方向,揭榜率达到82%;其中已有24个课题组顺利结题,部分成果已合入社区主干,成为开发者可直接使用的技术能力。同时,共有4个课题获评“领航课题”、7个课题获评“先锋课题”。仅在2025年度,已新增9个课题申报、22次揭榜,6个课题完成结题,充分展现了产学研用协同攻关的强大效能。 在此基础上,大会现场正式发布了新一批关键技术年度课题,覆盖大规模代码分析及自动测试、多智能体协同框架、软件库自动移植技术等核心领域,旨在更有针对性地解决开源鸿蒙生...
相关文章
文章评论
共有0条评论来说两句吧...


微信收款码
支付宝收款码