核心用法
React Native 使用 JavaScript/TypeScript 和 React 编写代码,通过桥接层调用原生组件渲染,实现「Learn once, write anywhere」。开发者使用熟悉的 React 范式(组件、Hooks、JSX),但需适配移动端特性:用 FlatList 替代长列表的 map+ScrollView,用 StyleSheet.create 管理样式,用 React Navigation 处理路由栈。
开发流程支持两条路径:Expo 托管工作流(零配置、快速迭代,适合 MVP 和常规需求)和裸工作流/原生 CLI(完全可控,需手动链接原生依赖)。expo-dev-client 成为折中方案——无需 eject 即可使用原生模块。
显著优点
- 开发效率:热重载、Ota 更新、跨平台代码复用率通常达 80%+
- 性能:Hermes 引擎将启动时间缩短 50%+,动画可通过
useNativeDriver跑在 UI 线程 - 生态成熟:Expo SDK 覆盖相机、定位、通知等高频需求,社区库丰富
- Native 能力:可编写原生模块(TurboModules)或直接使用 Swift/Kotlin 代码
- 调试工具:Flipper 集成网络、布局、性能分析,Hermes 支持 Chrome DevTools
潜在局限
- 平台差异:阴影、边框裁剪、状态栏、返回键等行为需
Platform.select处理 - 复杂动画:超过 60fps 的连续手势动画仍逊于纯原生(如 Flutter、SwiftUI)
- 包体积:Hermes 虽优化了内存,但 RN 引擎本身带来约 3-5MB 增量
- New Architecture 迁移:Fabric/TurboModules 为可选升级,第三方库兼容性需验证
- 调试盲区:原生崩溃不在 JS 调试器显示,需 Xcode/Android Studio 日志排查
适合人群
- 已有 React/Web 经验,希望快速进入移动领域的团队
- 需同时覆盖 iOS/Android,但预算/人力有限的中早期项目
- 以内容展示、表单、电商为主的场景(非重度游戏/图形应用)
- 追求迭代速度优先于极致性能的 SaaS、社交、工具类应用
常规风险
- 列表性能:忘记
keyExtractor或误用ScrollView导致内存爆炸、卡顿 - 导航状态污染:传递非序列化参数(函数、类实例)破坏深链和状态恢复
- 订阅泄漏:
useEffect缺少 cleanup 返回函数,造成内存泄漏和异常回调 - 样式陷阱:inline styles 导致每次渲染新建对象,触发不必要的重渲染
- 构建缓存:原生依赖变更后未执行
pod install或gradlew clean,引发诡异编译错误