React Native 项目开发概述(附带官方脚手架 & Expo 讲解)
React Native(简称 RN)是 Meta 推出的跨端移动开发框架:使用 JavaScript / TypeScript 编写业务代码,最终渲染成安卓、iOS 的原生控件,不是网页套壳。一套业务代码可以同时运行在 Android 和 iOS,兼顾开发效率与原生体验。
核心思想:用 JS 写界面逻辑,通过 JS 桥调用平台原生组件(View、Text、Image),样式使用 Flexbox,没有 DOM。
RN 开发有两条主流技术路线:官方脚手架(Bare 裸项目) 和 Expo,下面先讲通用开发流程,再分开讲两条路线。
一、RN 通用开发流程(两条路线都适用)
- 环境准备
- Node.js + npm/yarn:RN 和 Expo 都依赖
- 代码编辑器:VS Code,推荐插件:React Native Tools、TypeScript
- 创建项目:二选一:官方脚手架 / Expo
- 业务开发
- 使用 RN 内置原生组件搭建页面:View(容器)、Text(文字)、Image(图片)、TextInput(输入框)、ScrollView/FlatList(滚动列表)、TouchableOpacity(点击)
- 样式:
StyleSheet.create,Flex 布局,无 px,单位是设备独立像素 - 路由:
@react-navigation页面跳转 - 网络:axios / fetch 请求后端接口
- 状态管理:简单场景 useState/useContext;复杂业务 Zustand、Redux Toolkit
- 原生能力:相机、定位、存储、推送等,需要安装对应原生库
- 调试
- 模拟器 / 真机预览;摇一摇打开开发者菜单;热重载快速看修改效果;Flipper 查看日志、网络
- 打包发布
- Android:生成 APK(本地安装)或 AAB(上架应用商店)
- iOS:打包 IPA,上传 App Store Connect
RN 通用痛点:安卓 iOS 平台差异、原生库需要编译、长列表性能要使用 FlatList/FlashList、权限需要分别在两端配置。
二、路线1:官方脚手架(Bare React Native,裸项目)
官方 CLI,
react-native脚手架,直接生成完整的 Android、iOS 原生工程目录。 本质:RN JS代码 + 完整安卓、iOS 原生项目,你可以直接修改原生代码。
创建项目
# 创建 TypeScript 模板项目
npx react-native@latest init RNBareDemo --template react-native-template-typescript
cd RNBareDemo运行项目
# Android,需要 Android Studio + 模拟器/USB真机
npm run android
# iOS,仅macOS,需要Xcode + CocoaPods
npm run ios目录特点
项目自带 android/ 和 ios/ 文件夹,这两个就是标准安卓、iOS原生工程。 你可以在这里写 Java/Kotlin、Swift/Objective-C,修改 gradle、pod 配置、权限、应用签名。
✅ 优点
- 完全自由,支持手写自定义原生代码
- 对接厂商私有SDK、蓝牙、串口、硬件设备无限制
- RN 版本可以自主升级,不受第三方SDK版本捆绑
- 混合开发友好:已有原生App嵌入RN页面
❌ 缺点
- 环境很重:安卓要装Android Studio、SDK;iOS必须mac+Xcode,新人环境踩坑非常多
- 大部分第三方原生库安装后,iOS需要执行
pod install,并且需要重新编译App,编译耗时久 - 真机调试需要USB数据线;iOS真机调试需要开发者证书
- 不能扫码预览,每次新增原生依赖都要全量编译项目
打包
- Android:进入 android 目录,
./gradlew assembleRelease打APK;./gradlew bundleRelease打AAB - iOS:Xcode Archive 打包,上传App Store
适用场景
企业正式App、需要深度原生定制、硬件对接、已有原生App做混合开发。
三、路线2:Expo
Expo 是基于 React Native 的上层工具链,封装了原生层,默认隐藏 android/ios 原生工程,屏蔽原生编译的复杂工作。 核心产品:Expo Go(开发预览)、EAS Build(云端打包)
创建项目
# 创建TS项目
npx create-expo-app ExpoDemo
cd ExpoDemo运行项目
npx expo start启动后生成二维码,手机安装 Expo Go App,扫码即可实时预览项目。
Windows / Mac 都可以开发,不需要 Android Studio、Xcode。
目录特点
默认没有 android、ios 文件夹,原生配置写在 app.json。 只有执行 npx expo prebuild 才会生成 android/ios 文件夹,此时项目变成预构建裸项目,失去Expo的便捷性。
✅ 优点
- 环境极简,只需要 Node,新人上手快
- Expo Go扫码预览,多人协作分享页面非常方便,代码修改实时刷新
- 大量原生能力(相机、定位、文件、推送)已经封装好,安装库不用手动配置原生
- EAS云端打包,本地不用搭建编译环境,一键打包Android/iOS安装包
❌ 缺点
- RN版本、第三方原生库版本绑定 Expo SDK,升级要跟着Expo SDK走,版本限制大
- 默认不能写自定义原生代码。如需原生代码:使用Expo插件 + Dev Build,或者 prebuild 退化成裸项目
- 小众/私有原生SDK很难接入;打包产物体积比裸项目略大
打包
使用 EAS 云端打包
npm install -g eas-cli
eas login
eas build:configure
eas build --platform android
eas build --platform ios适用场景
产品原型、内部工具、轻量商业App;团队不想维护笨重的安卓iOS编译环境。
四、快速选型总结
- 项目需要自定义原生代码、对接硬件、私有SDK → 官方脚手架 Bare RN
- 快速开发原型、原生需求都是通用能力,不想折腾安卓iOS环境 → Expo
五、两条路线对比精简版
React Native 主流UI框架(区分Bare裸项目 / Expo兼容性)
全部支持TS,大部分Expo、官方脚手架裸项目都能用;少数库自带原生依赖,裸项目需要编译,Expo要用dev build。
1. React Native Paper(推荐 Material Design)
- 设计规范:Google Material Design3,风格现代、干净
- 组件:Button、Input、Card、Dialog、Drawer、下拉、进度条,业务组件齐全
- 兼容:✅ Expo、✅ Bare RN
- 优点:文档完善、主题系统成熟,支持明暗主题切换,维护稳定
- 缺点:视觉偏安卓风格,iOS原生感弱一点
- 适合:工具类App、后台管理App、偏Android风格产品
#安装
npm install react-native-paper2. Ant Design Mobile RN(antd-rn,国内最熟悉)
- 阿里antd移动端RN版本,和Web antd设计语言一致
- 组件:表单、弹窗、tabs、列表、搜索栏,适合国内业务系统
- 兼容:✅Bare RN;✅Expo(部分原生组件需要dev build)
- 优点:中文文档,前端熟悉antd上手极快,适合B端、后台、内部系统
- 缺点:近年更新速度一般,部分组件老旧,复杂动画一般
- 适合:国内企业后台、内部管理APP、中台类项目
3. Gluestack UI(新一代,NativeBase继任者)
- 现代设计系统,支持按需复制组件,搭配NativeWind(Tailwind)
- 兼容:✅Expo、✅Bare RN,支持Expo Router
- 优点:可只引入需要组件,包体积可控;可访问性好,主题Token强大;支持一键复制组件源码到项目,没有重度依赖锁死
- 缺点:学习成本略高,需要适应它的主题体系
- 适合:中大型商业项目、需要自定义品牌主题、想要Tailwind风格
4. Tamagui(高性能优先)
- 高性能通用跨端组件库,支持RN + Web一套代码,编译时优化样式,性能很强
- 兼容:✅Expo、✅Bare RN
- 优点:headless无样式原语 + 预设组件二选一;复杂动画、弹窗、sheet、下拉菜单能力极强,TS类型完善
- 缺点:上手门槛高,学习曲线陡,包和配置复杂
- 适合:高性能要求、复杂交互、RN+Web多端同构的企业项目
5. UI Kitten(Eva Design System,主题强)
- 基于Eva设计体系,主打动态主题切换,一键切换深色/浅色,自定义主题变量简单
- 兼容:✅Expo、✅Bare RN
- 优点:内置大量图标,主题配置简单,适合需要换肤的App
- 缺点:组件自定义深度有限,国内使用量偏少
- 适合:需要多套主题、换肤功能的App
6. React Native Elements(RNE,轻量简洁老牌库)
- 老牌轻量UI库,风格简约,API简单
- 兼容:✅Expo、✅Bare RN
- 优点:上手最简单,组件不多但够用,适合快速原型
- 缺点:维护活跃度一般,复杂业务组件不足,不适合大型长期项目
- 适合:Demo、快速原型、小型简单App
7. NativeWind(不是完整组件库,是Tailwind CSS for RN)
很多人会混淆,它只是样式工具,不是组件库;常搭配 gluestack、nativecn使用
- 用Tailwind类写RN样式,不用写StyleSheet.create
- ✅ Expo、✅Bare RN都支持
- 适合:熟悉web Tailwind的开发者,快速写自定义组件
8. NativeCN UI(shadcn/ui RN移植)
- 理念和web shadcn一样:复制组件源码进项目,不是安装大依赖包,基于NativeWind
- ✅Expo、✅Bare RN
- 优点:组件完全在你项目内,可以随便改,无版本锁定,现代干净UI
- 缺点:需要自己维护复制进来的组件,没有统一升级
- 适合:喜欢shadcn、想高度自主掌控UI的团队
快速选型建议
- 国内B端、后台、内部系统,前端熟悉antd → Ant Design Mobile RN
- Material风格,稳定成熟,快速开发 → React Native Paper
- 新项目,想要强主题、可控包体积,兼顾Expo/Bare → Gluestack UI
- 追求极致性能、复杂弹窗/动画,RN+Web同构 → Tamagui
- 快速原型、简单小项目 → React Native Elements
- 喜欢Tailwind、shadcn开发体验 → NativeCN + NativeWind
Expo vs Bare 额外注意点
- Expo Go:如果只用Expo Go直接扫码预览,不要选带原生依赖很重的库,否则会报错,要用EAS Dev Build
- Bare官方脚手架:上面所有库都可以用,遇到原生相关组件记得iOS执行
pod install
