前端开发
用 Expo 构建生产级 React Native…
在开发 React Native/Expo 移动应用、集成原生模块或搭建离线优先架构时,提供项目结构、导航、性能与发布方面的可执行做法。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 Expo 构建生产级 React N特定
解决思路
- 使用 src/ 目录组织项目:app/ 放 Expo Router 屏幕((auth)/ 认证组、(tabs)/ 标签导航、_layout.tsx 根布局),components/ 分 ui/ 与 features/,另有 hooks/、services/、stores/、utils/、types/
- 在 Expo 与 Bare React Native 之间做选择:Expo 设置简单、用 EAS Build 处理原生模块、内置 OTA 更新、用 EAS 构建服务、通过 Config plugins 定制原生代码;Bare RN 设置复杂、需手动链接原生模块、手动配置 OTA、自建 CI、可直接访问原生代码
- 用 npx create-expo-app@latest my-app -t expo-template-blank-typescript 创建新 Expo 项目
- 用 npx expo install 安装核心依赖:expo-router、expo-status-bar、react-native-safe-area-context、@react-native-async-storage/async-storage、expo-secure-store、expo-haptics
- 在 app/_layout.tsx 中用 QueryProvider 与 ThemeProvider 包裹 Stack,设置 screenOptions={{ headerShown: false }},并注册 (tabs)、(auth) 以及 presentation: 'modal' 的 modal 屏幕
- 当上述导航层级不够用时,阅读 references/details.md 获取详细模式文档
- 优先使用 Expo:开发更快、支持 OTA 更新、原生代码托管
- 长列表用 FlashList 替代 FlatList 以获得更好性能
- 对组件做 memoize 以避免不必要的重渲染
- 用 Reanimated 在原生线程上实现 60fps 动画
- 在真机上测试,模拟器会遗漏真实环境问题
- 不要使用内联样式,用 StyleSheet.create 提升性能
- 不要在 render 中发起请求,改用 useEffect 或 React Query
- 不要忽略平台差异,要在 iOS 和 Android 上都测试
- 不要把密钥写进代码,使用环境变量
- 不要跳过错误边界,移动端崩溃代价很高
适用边界 · 注意事项
- 需要直接访问自定义原生代码且不愿使用 Config plugins 时,Expo 托管方案可能不适用
- 项目已深度绑定 Bare React Native 的手动链接与自建 CI 流程时,迁移到 Expo 成本较高