InfoQ

React 19.3: Adds a browser() API, Giving Client-Only Rendering a First-Class Name

8.5内容质量
React 19.3: Adds a browser() API, Giving Client-Only Rendering a First-Class Name

TL;DR · AI 摘要

React 19.3 新增 browser() API,通过 Suspense 机制实现客户端专用组件的优雅退出,解决 SSR 渲染冲突问题。

核心要点

  • browser() API 使组件在 SSR 时暂停渲染,避免 hydration mismatch
  • 需配合 Suspense 边界使用,客户端渲染时返回 undefined
  • Next.js 用户可替代 dynamic({ ssr: false }) 方案

结构提纲

按章节快速跳转。

  1. §React 19.3 新特性

    介绍新增 browser() API 的核心价值和使用场景

  2. ·SSR 渲染困境

    解析客户端专用组件在服务器端渲染时的兼容性问题

  3. 通过 use(browser()) 实现渲染暂停和条件执行

  4. 必须配合 Suspense 边界和 Client Component 使用

  5. 提供 onBrowserBailout 回调追踪渲染跳过位置

  6. 替代 Next.js dynamic({ ssr: false }) 的通用方案

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • React 19.3 新特性
    • browser() API
      • SSR 退出机制
      • Suspense 边界依赖
      • 条件渲染实现
    • 解决的痛点
      • localStorage 读取冲突
      • window 对象缺失
      • 时区信息获取
    • 生态影响
      • 替代 Next.js dynamic API
      • 框架兼容性提升

金句 / Highlights

值得收藏与分享的关键句。

#React#SSR#前端#API
打开原文

React 19.3:新增 browser() API,为仅客户端渲染赋予正式名称 - InfoQ

InfoQ 首页 News React 19.3:新增 browser() API,为仅客户端渲染赋予正式名称

Web 开发

QCon AI 波士顿(2027年7月8-9日):AI 原型已成功运行。生产环境会发生什么?

React 19.3:新增 browser() API,为仅客户端渲染赋予正式名称

2026年10月12日 2分钟阅读

作者:

  • Daniel Curtis

#### 关注我们

YouTube

232K 粉丝

LinkedIn

26K 粉丝

Instagram

新

RSS

19K 读者

X

57.1k 粉丝

Facebook

21K 点赞

Bluesky

收听本文 -

0:00

音频准备就绪

您的浏览器不支持音频元素。

正常

1.25x

1.5x

喜欢

新下拉阅读列表

  • 阅读列表

React 19.3 于9月9日通过 npm 发布,与稳定的视图转换和片段引用一同推出,新增了一个较小但广受好评的功能:react-dom 的 browser() API,允许组件正式退出服务器端渲染。分享文档的 Aurora Scharff 宣布该功能现已上线,可通过 Canary 渠道使用,开发者通过 use() 传递该值,组件在服务器端会暂停渲染。

该功能解决的问题对所有进行 SSR 的开发者都耳熟能详。读取 localStorage、window 或设备时区的组件无法在服务器端生成有意义的 HTML,而现有的变通方法笨拙。开发者要么在 effect 中切换 mounted 标志,要么用 typeof window !== 'undefined' 保护渲染,这种模式一旦服务器和首次客户端渲染结果不一致,就会导致水合不匹配。

新 API 取代了这两种方式:

code
import { use } from 'react';
import { browser } from 'react-dom';
function LocalTime() {
 use(browser());
 return <p>{new Intl.DateTimeFormat().resolvedOptions().timeZone}</p>;
}

在服务器端渲染期间,use(browser()) 会阻止组件渲染,并在 HTML 中显示最近的 Suspense 边界后备内容。在浏览器中它返回 undefined,因此组件在水合后会正常渲染。该 API 必须从客户端组件中调用,并且必须位于 Suspense 边界内,否则服务器渲染会失败。由于 use() 可以在条件语句后调用,组件仅在必要时才会延迟渲染,例如数据钩子在 loader 提供 initialData 时在服务器端渲染,否则退出。React 还新增了 onBrowserBailout 回调和可选的 reason 参数,以便团队准确报告服务器渲染被跳过的具体位置。

该功能首次以 React 核心 PR 的形式实现,This Week in React 将其描述为“消除服务器端错误抑制的笨拙变通方法”。在跟踪该功能的文档问题中,一位贡献者表示:“对 browser() API 非常兴奋,因为它以更清晰的方式解决了仅客户端组件的问题。” 一位开发者在谈及该功能时称,条件数据获取版本是“我见过的最干净的解决方案,用于回答‘是否应在服务器端获取数据’的问题”。

该方法还缩小了与框架特定逃生舱的差距。Next.js 用户长期以来一直使用 next/dynamic 的 dynamic(() => import('./C'), { ssr: false }),而 Astro 提供了 client:only 指令,但两者都依赖于各自的打包工具。browser() 将该能力直接集成到 React 中,因此可以与任何 SSR 设置兼容,而不仅限于单一框架。

升级是标准的 [email protected] 和 [email protected] 版本更新,遵循 React 19 升级指南。不过 use reference 仍将 browser() 标记为仅限金丝雀渠道,因此在生产环境依赖前请确认您的发布渠道。

React 是一个开源的 JavaScript 库,用于构建用户界面。它最初由 Facebook 创建,现在由 Meta 及其庞大的贡献者社区共同维护。它推广了基于组件的模型,该模型将 UI 描述为状态的函数,并为 Next.js 和 Remix 等服务端和全栈框架,以及通过 React Native 的原生应用提供了基础支持。自 2013 年首次发布以来,它已成为最广泛使用的前端工具之一。近期版本进一步强化了服务端渲染、Suspense 以及浏览器() API 所依赖的并发特性。

作者部分的主要包装器

关于作者

章节标题

每位作者的主要包装器

#### Daniel Curtis

显示更多

显示更少

#### 本内容属于 Web 开发主题

##### 相关主题:

  • 开发
  • JavaScript
  • 服务端渲染
  • Next.js
  • Web 开发
  • React
  • 相关编辑内容
  • 相关赞助商 《实用智能体编码实践手册》
  • 相关赞助商 大规模自动化代码转换。修复漏洞、迁移框架、现代化所有仓库中的遗留代码。免费试用 Moderne

InfoQ 新闻通讯

每周二发送上周 InfoQ 内容摘要。加入超过 250,000 名高级开发者的社区。查看示例

我们保护您的隐私。