Skip to content

React

React 与 React Native 技术栈全景 —— 从 Web 架构到移动跨端,覆盖核心差异、生态选型与工程实践

React 生态的核心决策不是"选哪个库",而是理解 React 的设计哲学 —— UI = f(state)。本专题梳理 React Web 与 React Native 的核心差异、共享策略与各自生态选型,帮助你构建完整的技术认知地图。

React vs React Native

一句话总结

React(React.js)是构建 Web 界面的 JavaScript 库,操作 DOM;React Native 是构建原生移动应用的框架,操作原生 UI 组件。两者共享 React 核心(组件、状态、JSX、Hooks),但渲染目标不同。

核心差异

维度React (React DOM)React Native
定位Web 前端 UI 库移动端跨平台框架
渲染目标浏览器 DOM / HTMLiOS / Android 原生 UI
平台Web(PC、移动浏览器)Android、iOS(以及 tvOS、visionOS 等)
组件体系HTML 元素(divspaninput 等)原生组件(ViewTextTextInput 等)
样式方案CSS / CSS-in-JS / Tailwind 等Flexbox 布局(Yoga 引擎),StyleSheet API,无 CSS
导航React Router 等React Navigation / Expo Router
动画CSS Animation / Framer Motion / GSAPAnimated API / Reanimated / LayoutAnimation
调试工具Chrome DevTools / React DevToolsFlipper / React DevTools / Expo Dev Tools
打包Webpack / Vite / TurbopackMetro bundler
发布方式靼态资源部署到服务器 / CDNApp Store / Google Play / OTA 热更新

架构对比

React (Web):
  JSX → React.createElement → Virtual DOM → ReactDOM → 真实 DOM → 浏览器渲染

React Native:
  JSX → React.createElement → Virtual DOM → React Native Bridge / JSI → 原生 UI 组件 → 系统渲染
  • React DOM:通过 react-dom 包将虚拟 DOM 映射为浏览器 DOM 操作
  • React Native:通过 Bridge(旧架构)或 JSI / Fabric(新架构)将虚拟 DOM 映射为原生平台组件

React Native 新旧架构对比

特性旧架构(Bridge)新架构(Fabric + TurboModules + JSI)
通信方式异步 Bridge(JSON 序列化),JS → Native 串行传递JSI(JavaScript Interface),JS 直接调用 Native,同步
线程模型JS 线程、UI 线程、Shadow 线程分离多线程可配,支持同步渲染
渲染引擎Shadow Tree(旧)Fabric Renderer
性能Bridge 存在拥塞瓶颈更低延迟,接近原生性能
组件Native UI 组件Fabric Native Components

代码层面差异

组件映射

jsx
// React (Web)
<div>
  <h1>Hello World</h1>
  <input type="text" value={text} onChange={handleChange} />
  <button onClick={handleClick}>Click</button>
</div>

// React Native
<View>
  <Text style={{ fontSize: 24 }}>Hello World</Text>
  <TextInput value={text} onChangeText={setText} />
  <Button onPress={handleClick} title="Click" />
</View>
React (Web)React Native说明
<div><View>容器组件
<span> / <p> / <h1>-<h6><Text>所有文本必须包裹在 <Text>
<input><TextInput>文本输入
<button><Button> / <Pressable>按钮,RN 建议用 Pressable
<img><Image>图片
<ul> / <ol><FlatList> / <ScrollView>列表
onClickonPress点击事件
classNamestyle样式传递

样式差异

jsx
// React (Web) — CSS
.box {
  display: flex;
  justify-content: center;
  padding: 16px;
  background-color: blue;
}

// React Native — StyleSheet
const styles = StyleSheet.create({
  box: {
    flex: 1,
    justifyContent: "center",
    padding: 16,
    backgroundColor: "blue",
  },
});
CSS (Web)React Native StyleSheet
全部 CSS 属性可用仅支持 Flexbox 布局 + 部分 CSS 属性子集
属性名用 kebab-case:background-color属性名用 camelCase:backgroundColor
数值单位:px、rem、em、%纯数字(逻辑像素),无需单位
选择器、伪类、媒体查询不支持,通过 JS 逻辑实现
display: block/inline/flex/grid默认 flex,不支持 grid
层叠优先级、继承无层叠;通过 JS 继承样式对象

平台 API 差异

jsx
// React (Web) — 浏览器 API
window.localStorage.setItem("key", "value");
document.getElementById("app");
fetch("/api/data");

// React Native — 跨平台 API
import AsyncStorage from "@react-native-async-storage/async-storage";
AsyncStorage.setItem("key", "value");

// 使用 ref 而不是 DOM 查询
const viewRef = useRef(null);

// fetch 同样可用
fetch("https://api.example.com/data");

共享与复用

可共享的部分

  • ✅ React 核心(Hooks、Context、ref、Suspense 等)
  • ✅ 业务逻辑(自定义 Hooks、状态管理 Redux/Zustand)
  • ✅ 数据层(API 请求、数据处理、数据验证)
  • ✅ 类型定义(TypeScript interfaces / types)
  • ✅ 工具函数

不可共享的部分

  • ❌ UI 组件(div vs View
  • ❌ 样式(CSS vs StyleSheet)
  • ❌ 路由(React Router vs React Navigation)
  • ❌ 平台特定 API(DOM API vs Native API)

Monorepo 中的常见共享策略

packages/
├── shared/            # 共享业务逻辑、Hooks、类型
│   ├── hooks/
│   ├── utils/
│   └── types/
├── ui-web/            # React DOM 组件
├── ui-native/         # React Native 组件
└── app-web/           # Next.js / Vite 项目
└── app-mobile/        # Expo / React Native 项目

开发体验对比

维度React (Web)React Native
开发环境浏览器 + DevTools模拟器 / 真机 / Expo Go
热更新速度极快(Vite HMR)较快(Fast Refresh)
UI 调试Chrome DevTools 直接查看 DOM/CSS无 DOM 检查,通过 RN DevTools / Flipper
生产部署npm run build → CDNnpx expo build /Archive → 应用商店审核
第三方库生态极丰富(npm 全部可用)丰富(需兼容 RN 环境,无 DOM 依赖)
学习曲线中等(需了解 HTML/CSS 基础)较高(需了解原生平台概念 + RN 限制)

选择建议

场景推荐方案
Web 网站 / 后台管理 / H5 活动页React
跨平台移动 App(Android + iOS)React Native
同时需要 Web + 移动端React + React Native 共享业务逻辑
高性能游戏 / AR / 复杂原生交互原生开发(Swift/Kotlin)或 Flutter
快速验证 MVP 移动应用React Native(Expo)

构建 React 应用

官方推荐的生产级框架

React 官方文档明确建议新项目使用框架开始,框架提供了 React 应用所需的路由、数据获取、构建等开箱即用的能力。

1. Next.js(Vercel 维护)

当前 React 生态中最主流的全栈框架,完整实现 React Server Components(RSC)规范。

bash
npx create-next-app@latest

核心特性:

  • App Router:基于文件系统的路由,支持 React Server Components、Suspense 数据获取
  • 渲染模式全覆盖:SSR、SSG、ISR、CSR,可按路由粒度选择
  • Server Actions:在服务端执行的函数,无需手动创建 API 路由即可处理表单提交和数据变更
  • Route Handlers:基于 Web 标准 API(Request/Response)的 API 路由
  • Middleware:基于 Edge Runtime 的请求拦截
  • 内置优化:图片(next/image)、字体(next/font)、脚本加载等
  • 部署灵活:支持 Node.js、Docker 容器、静态导出,也可部署至 Vercel 等平台

2. React Router v7(Shopify 维护)

从路由库演进为全栈框架,强调标准 Web API,前身为 Remix。

bash
npx create-react-router@latest

核心特性:

  • 标准 Web API 优先:直接使用 Request/ResponseFormDataURL
  • 多运行时支持:可部署至 Node.js、Deno、Cloudflare Workers、Netlify 等多种环境
  • 嵌套路由:成熟的嵌套布局和数据加载方案
  • loader / action 模式:每个路由有独立的服务端数据加载和变更函数

3. Expo — 同时支持 Web + 原生移动端

React 官方推荐的通用跨平台方案,一套代码同时覆盖 Web、Android、iOS。

bash
npx create-expo-app@latest

新兴框架

框架特点状态
TanStack StartTanStack Router + Nitro + Vite,SSR/流式传输/Server FunctionsBeta
RedwoodSDK全栈框架,预装大量依赖和配置,集成度高稳定

选择框架

React 官方已明确不推荐新项目裸用 CRA(Create React App)。选择框架意味着获得路由、SSR、数据获取等开箱即用的能力,而非自己从零搭建。

构建工具(自建方案)

当现有框架无法满足需求或仅用于学习时,可使用以下构建工具自行搭建:

工具特点
Vite极速 HMR,Rollup 打包,Vue/React 原生支持,生态最活跃
Parcel零配置,开箱即用,适合中小项目快速启动
RSbuild基于 Rust(Rspack),高性能,取代 Webpack 场景
TurbopackNext.js 团队维护的 Rust 打包器,Next.js 内置使用

状态管理库

特点适用场景
Redux ToolkitReact 生态最广泛的状态管理,含 RTK Query 数据获取大型项目、复杂全局状态
Zustand轻量(~1KB),API 极简,无 boilerplate中小型项目首选
Jotai原子化状态,按组件粒度订阅,自动优化渲染需要细粒度响应式
Valtio基于 Proxy 的响应式状态,直接修改对象简单直观的全局状态
MobX基于装饰器的响应式,OOP 风格习惯 OOP 模式的团队

数据获取

方案特点
TanStack Query(React Query)服务端状态管理,缓存/重试/轮询/乐观更新,最主流
SWRVercel 出品,stale-while-revalidate 策略,API 极简
RTK QueryRedux Toolkit 内置,与 Redux 无缝集成
Apollo ClientGraphQL 首选,缓存/订阅/本地状态

路由

特点
React Router最成熟的路由方案,v7 之后自带框架能力
TanStack RouterTypeScript 优先,类型安全的路由参数和搜索参数

CSS / 样式方案

方案特点
Tailwind CSS原子化 CSS,当前最主流,配合类名排序和设计令牌
CSS Modules原生支持(Vite/Next.js 内置),局部作用域无冲突
Styled ComponentsCSS-in-JS 经典方案,动态样式能力强
Panda CSS编译时 CSS-in-JS,零运行时开销
Vanilla ExtractTypeScript 编写 CSS,编译时生成静态 CSS 文件

UI 组件库

特点
shadcn/ui复制粘贴式组件库,Tailwind + Radix 底层,完全可定制
Ant Design企业级中文生态最丰富的组件库
MUI (Material UI)Material Design 规范,组件完善,主题系统强大
Chakra UI基于设计令牌,开发体验好,可访问性内置
Radix UI无样式基元组件(Headless),可访问性完善的底层库

测试

工具特点
Jest最广泛的单元/集成测试框架
VitestVite 生态测试框架,与 Jest API 兼容,速度更快
React Testing Library以用户视角测试组件行为,React 官方推荐
Playwright微软出品,端到端测试,支持多浏览器并行
CypressE2E 测试先驱,实时重载,调试体验好

技术选型速查

项目类型推荐组合
全栈 Web 应用Next.js + Tailwind CSS + TanStack Query + Zustand
SPA 后台管理Vite + React Router + shadcn/ui + Zustand
静态博客/文档Next.js (静态导出) / Astro + MDX
跨平台移动 + WebExpo + React Navigation
企业级中台Next.js / Vite + Ant Design + Redux Toolkit

构建 React Native 应用

官方推荐方式 — Expo

React Native 官方强烈推荐使用 Expo 框架启动新项目,不推荐裸用 React Native CLI。

bash
npx create-expo-app@latest

Expo 核心能力:

  • 文件路由(Expo Router):基于文件系统的路由,类似 Next.js App Router
  • 跨平台:同时支持 Android、iOS、tvOS、Web
  • 通用原生模块标准库:Camera、Location、Notifications 等开箱即用
  • Expo Go:手机端调试 App,无需编译即可预览
  • EAS(Expo Application Services):云端构建、提交应用商店、OTA 热更新

警告

React Native 官方已明确不推荐新项目使用裸 RN CLI。Expo 提供了完整的开发、构建、发布流程,只有在需要深度定制原生层时才考虑裸工作流。

React Native CLI(裸工作流)

不推荐用于新项目,仅在以下场景考虑:

  • 应用有特殊原生约束(如自定义原生模块框架不满足)
  • 需要完全控制原生层的配置和构建管线
  • 将 React Native 集成到已有原生 App 中
bash
npx @react-native-community/cli init MyApp

导航

特点
React NavigationRN 导航事实标准,支持 Stack/Tab/Drawer 等多种导航器
Expo RouterExpo 团队维护,文件路由,基于 React Navigation 底层

状态管理

React Web 的状态管理库在 RN 中同样可用:ZustandRedux ToolkitJotai 均可正常运行,因为它们不依赖 DOM。

数据持久化

特点
AsyncStorage键值对异步存储,轻量方案
expo-secure-store安全存储(Keychain / Keystore),适合 Token 等敏感数据
WatermelonDB基于 SQLite 的高性能本地数据库,支持懒加载和增量更新
Realm嵌入式对象数据库,MongoDB 维护

UI 组件库

特点
React Native Elements跨平台 UI 组件库,组件丰富
NativeBase基于设计令牌的组件库,支持自定义主题
React Native PaperMaterial Design 3 实现,Google 风格
Tamagui编译时优化,同时支持 Web 和 Native,性能好
gluestack-uiNativeBase 团队新作,基于 Tailwind 的通用组件库

动画

特点
React Native Reanimated高性能动画库,在 UI 线程执行动画,60fps 流畅
React Native SkiaShopify 维护,基于 Skia 引擎的 2D 图形绘制
LottieAfter Effects 动画直接导出 JSON 渲染
Moti基于 Reanimated 的声明式动画库,API 极简

构建与发布

工具特点
EAS BuildExpo 云端构建,免本地 Xcode / Android Studio 环境
EAS Submit一键提交至 App Store / Google Play
EAS UpdateOTA 热更新,绕过应用商店审核快速修复 Bug
Fastlane开源原生部署自动化工具,适用于裸工作流

其他关键工具

工具用途
React Native Screens原生屏幕容器,优化导航性能
React Native Gesture Handler原生手势库,提供平台原生级别的手势响应
React Native MMKV高性能同步键值存储(基于微信 MMKV),比 AsyncStorage 快 30 倍
Expo Dev Client自定义开发客户端,支持原生模块调试
ReactotronReact Native / React 桌面调试工具

技术选型速查

项目类型推荐组合
移动 App 新项目Expo + Expo Router + React Navigation + Zustand
跨平台(Web + 移动)Expo + Tamagui + React Navigation
已有原生 App 集成React Native CLI + React Navigation
高性能动画密集型React Native Reanimated + React Native Skia
企业级离线优先WatermelonDB + Redux Toolkit + React Native MMKV