React Native

React Native 跨平台移动开发——New Architecture(Fabric/TurboModules)、Expo 生态、与 Flutter 对比、性能优化策略、从 Web 到移动端的技能迁移。

React Native

先把这个 topic 说准

React Native 不是“把网页打包成 App”。

它也不是“用 React 语法去写一个浏览器壳”。

更准确地说:

React Native 是一套让 React 组件模型可以驱动原生移动 UI 的框架与运行时体系。

这句话里最重要的是“驱动原生移动 UI”。

因为它说明了三件事:

  • React Native 和 Web 共享的是组件思维,不是 DOM
  • 它的运行时边界和浏览器完全不同
  • 前端工程师迁移过去时,能复用的是一部分思维,不是全部经验

如果这个定义讲不准,后面很多判断都会歪掉。

为什么前端工程师值得认真学

React Native 对前端工程师的吸引力,从来不只是“会 React 就能写 App”。

它更大的价值在于:

它让 Web 团队可以在不完全切换技术范式的前提下,进入移动产品交付。

这意味着:

  • 团队组织方式会变
  • 设计系统会变
  • 状态管理边界会变
  • 性能判断方法会变
  • 工具链和发布链路也会变

所以这个 topic 不是移动端小扩展。

它本质上是在回答:

一个 Web 团队如何进入移动端,而不把自己对平台边界的理解停留在浏览器时代。

过去的 React Native 为什么容易被讲旧

很多人对 React Native 的印象,还停留在一个老说法上:

JavaScript 和原生之间隔着一条 Bridge。

这个说法在历史上有用。

但如果今天还只会这样讲,就已经明显过时了。

React Native 官方在 2024 年发布的文章里明确说明:

New Architecture 已经到来。

React Native 0.76 把 New Architecture 变成默认选项。

到了 React Native 0.82,官方进一步强调它是首个完全运行在 New Architecture 上的版本。

这意味着:

如果还把 React Native 全部理解成“旧 Bridge 模型”,就会错过今天最关键的运行时变化。

所以 New Architecture 到底在改什么

它不是单点优化。

它改的是 React Native 的几个核心边界:

  • 渲染器
  • 原生模块访问方式
  • JavaScript 与原生之间的调用模型
  • 与现代 React 特性的对接能力

如果要用一句更容易抓住本质的话来讲:

New Architecture 的核心,不是“名字更现代”,而是它在重新定义 React Native 里 JS、原生和渲染系统之间的协作方式。

不要只背名词:Fabric、TurboModules、Hermes 分别在说什么

Fabric

可以先把 Fabric 理解成:

新的渲染系统。

它不只是一个性能补丁。

它的意义在于:

React Native 的 UI 更新方式,更好地对齐了现代 React 的调度与渲染能力。

这让并发特性、渲染一致性和原生视图更新之间的关系,比旧时代更清晰。

TurboModules

TurboModules 可以理解成:

新的原生模块访问方式。

它的价值不在于“又一个模块系统名词”。

而在于:

过去那种笨重、序列化开销更高的跨边界调用模型,被更直接的调用方式替代了。

Hermes

Hermes 是 React Native 生态里一个非常关键的 JavaScript 引擎。

官方长期把它放在移动端性能、启动速度、内存占用和运行体验的语境里讨论。

所以如果只把 Hermes 讲成“React Native 自带引擎”,也太浅。

更好的理解是:

它是 React Native 试图把移动端运行时体验做得更贴近产品现实的一部分。

为什么说这是“架构变化”,不是“参数优化”

很多人会用“更快了”“更省内存了”去概括 New Architecture。

这种说法没错,但不够。

更重要的是:

它让 React Native 终于不再那么容易被一个旧运行时故事框住。

以前大家一说 React Native,第一反应就是:

  • Bridge 成本
  • 卡顿
  • 原生能力边界
  • 大项目难做

今天这些问题当然没有完全消失。

但官方架构的叙事重点已经明显变化了。

现在更合理的表达应该是:

React Native 仍然有跨平台框架天然的约束,但它的核心运行时基础已经和几年前不一样了。

Web 工程师迁移时,哪些能力真的能复用

这个问题特别重要。

因为很多团队会在这里产生两种相反的误判。

一种是过度乐观:

“我们会 React,所以移动端也差不多。”

另一种是过度悲观:

“移动端完全是另一门技术,我们现有经验几乎没用。”

更真实的情况在中间。

高度可复用的部分

  • 组件拆分思维
  • 状态管理思维
  • 事件流和数据流的组织方式
  • TypeScript 建模
  • 设计系统抽象
  • 列表、表单、网络请求、缓存等通用工程模式

不能直接照搬的部分

  • DOM 相关经验
  • 浏览器 CSS 心智
  • Web 路由默认假设
  • 浏览器调试习惯
  • Web 性能瓶颈判断方式

也就是说,React Native 不是“Web 开发的移动壳”。

它更像是:

你把 React 作为思想骨架带了过去,但平台本身已经换了。

Expo 为什么已经不是“给新手玩的简化工具”

很多老印象会把 Expo 看成:

一个适合体验 React Native 的入门层。

今天这样讲已经不够准确。

Expo 官方文档提供的是一整套更完整的工程交付体验。

它解决的问题包括:

  • 项目初始化
  • 路由组织
  • 开发客户端
  • 云端构建
  • OTA 更新
  • 原生能力接入的一致性

这意味着,Expo 在很多现代 React Native 项目里,已经不是装饰性选项。

它经常是默认工作流的一部分。

所以更成熟的理解应该是:

Expo 不只是“让你更容易开始”,它还在试图降低团队进入 React Native 生产环境的工程门槛。

Expo Router 为什么会让 Web 团队更容易进入移动端

Expo Router 之所以经常被提起,不只是因为“它像 Next.js”。

而是因为它帮 Web 团队在组织方式上获得了熟悉感。

文件系统路由这件事,本身不是移动端必须拥有的能力。

但它能降低认知切换成本。

这在团队迁移时很重要。

因为很多工程问题,不只是技术难。

还包括组织学习成本高。

React Native 的性能应该怎么理解

这是最容易被表面化的部分之一。

很多讨论会直接落在:

  • React Native 快不快
  • 和 Flutter 谁更快

这种讨论太容易失真。

更靠谱的问法应该是:

  • 具体慢在哪里
  • 是启动问题、列表问题、动画问题,还是桥接问题
  • 是 JS 线程压力、布局压力,还是原生视图更新压力
  • 这个场景是否真的适合跨平台方案

也就是说,性能不是一个整体标签。

它永远是结构化问题。

React Native vs Flutter 应该怎么比较才不空泛

很多比较会把它写成一张表,然后下结论。

表可以有用。

但真正重要的是比较维度的含义。

React Native 的优势,往往在于:

  • Web 团队迁移成本更低
  • JavaScript/TypeScript 生态更熟
  • React 心智可延续
  • 与 Web 团队协作更顺

Flutter 的优势,往往在于:

  • UI 一致性更强
  • 渲染栈更统一
  • 平台差异被框架吸收得更多

所以这不是“谁更先进”的问题。

而是:

你要的是平台统一性,还是团队和生态的连续性。

容易误导人的几个说法

说法一:React Native 就是原生开发

这不准确。

它最终当然能调用原生能力,也能渲染原生视图。

但它不是“写 Swift/Kotlin 的另一种写法”。

它是一个跨平台框架。

这意味着你必须接受它的抽象层和它的边界。

说法二:React Native 就是 H5 App

这也不准确。

React Native 和 WebView 包壳是两回事。

它不是在浏览器里跑网页再塞进 App。

如果把这两者混为一谈,很多性能和架构讨论都会错位。

说法三:New Architecture 出来了,所有历史问题都没了

这同样太乐观。

New Architecture 解决的是一批长期痛点。

但跨平台框架该有的复杂度并没有消失。

团队仍然需要判断:

  • 这个模块要不要下沉原生
  • 这个交互是不是过度吃性能
  • 这个页面是不是更适合平台特化处理

中国互联网语境里它的价值

在中国互联网语境里,移动端产品密度很高。

团队会遇到:

  • 高频业务迭代
  • 多活动页和多场景入口
  • 复杂登录与风控
  • 与超级 App、扫码、分享、支付等链路的集成

在这种环境里,React Native 的价值通常不只是“跨平台省人”。

更常见的是:

前端团队希望在保留 React/TypeScript 生产力的前提下,尽快进入移动端业务线。

但这也意味着团队更容易在复杂真实业务里暴露平台边界。

所以中国语境下,React Native 往往更考验:

  • 团队是否真的懂平台边界
  • 原生协作是否顺畅
  • 工程治理是否够强

海外语境里为什么 Expo 权重更高

海外很多产品语境更接近:

  • SaaS
  • 创作者工具
  • 协作工具
  • 中小团队快速试错

在这种语境下,Expo 这类整合式工具链的价值会更明显。

因为团队更看重:

  • 更低的环境成本
  • 更统一的构建和发布流程
  • 更快的实验速度

所以如果只从“技术纯度”看 React Native,而不看团队交付模式,很容易低估 Expo 这类生态层的价值。

面试或技术分享里怎么讲比较像成熟工程师

一个更成熟的说法可以是:

React Native 的核心价值,不在于“前端也能做移动端”,而在于它让 React 这套组件和状态组织方式进入了原生移动应用开发。

但今天讲 React Native,不能再停留在旧 Bridge 叙事上,因为官方已经把 New Architecture 作为主线推进,Fabric、TurboModules 和 Hermes 一起在重塑渲染和原生调用边界。

对 Web 工程师来说,真正可复用的是 React 思维和工程组织方式,而不是浏览器经验本身。

如果是团队落地,则 Expo 生态已经越来越像生产工作流的一部分,而不只是入门工具。

实践建议

实践一:做一个最小的 Expo 项目

不要一上来做复杂应用。

先做一个只包含:

  • 路由
  • 列表
  • 表单
  • 请求
  • 本地状态

的最小项目。

目标不是做功能。

而是感受:

哪些 React 经验能直接复用,哪些地方已经明显不是 Web 了。

实践二:画出 React Native 的运行时边界图

自己用一页图解释清楚:

  • JS 在哪
  • 原生模块在哪
  • 渲染器在哪
  • Hermes 在哪
  • Expo 在工程链路里处于什么位置

只要这张图能画清楚,你对它的理解就会从“会用”升级到“能解释”。

实践三:选一个真实交互做性能观察

例如:

  • 长列表
  • 带图片的 feed
  • 输入联动搜索
  • 多状态表单

观察它的问题到底出在哪一层。

这样你会更快摆脱“React Native 快不快”这种空泛讨论。

延展阅读