Vercel React Native 最佳实践
由 Vercel 维护的 React Native 和 Expo 应用最佳实践综合指南,涵盖列表渲染、动画、导航和原生模块,旨在指导高性能移动应用的开发与代码审查。
安装
npx skills add https://github.com/vercel-labs/agent-skills --skill vercel-react-native-skills
概述
React Native 和 Expo 的性能与架构指南,按影响程度划分为八个规则类别。
- 列表性能(FlashList、记忆化、回调稳定性)、动画(GPU 属性、派生值)、导航、UI 模式、状态管理、渲染、单体仓库结构和配置。
- 列表性能规则解决虚拟化大型列表、优化图片、避免不必要的重新渲染等问题。
- 动画指导侧重 GPU 加速属性(
transform、opacity)与 Reanimated 模式;导航建议使用原生堆栈和标签导航器,而非纯 JS 方案。 - UI 模式规则包括:所有图片使用
expo-image、优先Pressable而非TouchableOpacity、原生模态框,以及 ScrollView 中的安全区域处理。 - 每条规则都有前缀代码(例如
list-performance-virtualize、animation-gpu-properties),便于在自动化工具和文档中引用。
何时申请
在以下情况下请参考这些准则:
- 构建 React Native 或 Expo 应用
- 优化列表和滚动性能
- 使用 Reanimated 实现动画
- 处理图片和媒体
- 配置原生模块或字体
- 使用原生依赖项构建单体仓库项目
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 列表性能 | 关键 | list-performance- |
| 2 | 动画 | 高 | animation- |
| 3 | 导航 | 高 | navigation- |
| 4 | UI 模式 | 高 | ui- |
| 5 | 状态管理 | 中等 | react-state- |
| 6 | 渲染 | 中等 | rendering- |
| 7 | 单体仓库 | 中等 | monorepo- |
| 8 | 配置 | 低 | fonts-、imports- |
快速参考
1. 列表性能(至关重要)
| 规则 ID | 说明 |
|---|---|
list-performance-virtualize | 大型列表使用 FlashList |
list-performance-item-memo | 记忆化列表项组件 |
list-performance-callbacks | 稳定回调引用 |
list-performance-inline-objects | 避免内联样式对象 |
list-performance-function-references | 将函数提取到渲染外部 |
list-performance-images | 优化列表中的图片 |
list-performance-item-expensive | 将昂贵计算移出列表项 |
list-performance-item-types | 异构列表使用 item types |
2. 动画(高)
| 规则 ID | 说明 |
|---|---|
animation-gpu-properties | 仅对 transform 和 opacity 做动画 |
animation-derived-value | 计算动画使用 useDerivedValue |
animation-gesture-detector-press | 按压交互使用 Gesture Detector |
3. 导航(高)
| 规则 ID | 说明 |
|---|---|
navigation-native-navigators | 使用原生 Stack 和原生 Tab,而非 JS 导航器 |
4. UI 模式(高)
| 规则 ID | 说明 |
|---|---|
ui-expo-image | 所有图片使用 expo-image |
ui-image-gallery | 图片灯箱使用 Galeria |
ui-pressable | 使用 Pressable 而非 TouchableOpacity |
ui-safe-area-scroll | 处理 ScrollView 中的安全区域 |
ui-scrollview-content-inset | 使用 contentInset 适配标题栏 |
ui-menus | 使用原生上下文菜单 |
ui-native-modals | 尽可能使用原生模态框 |
ui-measure-views | 使用 onLayout,而非 measure() |
ui-styling | 使用 StyleSheet.create 或 NativeWind |
5. 状态管理(中等)
| 规则 ID | 说明 |
|---|---|
react-state-minimize | 尽量减少状态订阅 |
react-state-dispatcher | 回调使用 dispatcher 模式 |
react-state-fallback | 首次渲染显示 fallback |
react-compiler-destructure-functions | React Compiler 解构函数 |
react-compiler-reanimated-shared-values | 编译器处理共享值 |
6. 渲染(中等)
| 规则 ID | 说明 |
|---|---|
rendering-text-in-text-component | 文本包裹在 Text 组件内 |
rendering-no-falsy-and | 条件渲染避免 && 与假值 |
7. 单体仓库(中等)
| 规则 ID | 说明 |
|---|---|
monorepo-native-deps-in-app | 原生依赖保留在 app 包内 |
monorepo-single-dependency-versions | 各包使用统一依赖版本 |
8. 配置(低)
| 规则 ID | 说明 |
|---|---|
fonts-config-plugin | 自定义字体使用 config plugin |
imports-design-system-folder | 整理设计系统导入 |
js-hoist-intl | 提升 Intl 对象创建 |
如何使用
请阅读各个规则文件以获取详细说明和代码示例:
rules/list-performance-virtualize.mdrules/animation-gpu-properties.md
每个规则文件包含:
- 简要解释其重要性
- 错误代码示例及解释
- 正确的代码示例及解释
- 更多背景信息和参考资料
完整汇编文件
完整规则详解请见:AGENTS.md