这是一份面向 React Native 与 Expo 应用的实践指南,按影响程度分级组织,强调性能优先。
用途:帮助开发者在列表、动画、导航、UI 模式、状态管理与 monorepo 组织上采用更优方案。
主要能力与建议: 一、列表性能(关键)。大型列表用 @shopify/flash-list 的 FlashList 替代 FlatList,设置 estimatedItemSize 与 keyExtractor;列表项用 memo 记忆化;回调用 useCallback 保持稳定,避免内联对象与匿名函数,样式放入 StyleSheet;图片用 expo-image,配合 contentFit、placeholder、transition、recyclingKey;异构列表用 getItemType 帮助复用单元格。 二、动画(高)。只对 transform 与 opacity 做动画,其余属性会触发布局;使用 react-native-reanimated 的 useAnimatedStyle、withSpring、useSharedValue、useDerivedValue;手势用 react-native-gesture-handler 的 Gesture/GestureDetector,动画按压反馈可用 Gesture.Tap 替代 Pressable。 三、导航(高)。优先使用 @react-navigation/native-stack 与 bottom-tabs 等原生导航器,而非 JS 实现的 stack;在 Stack.Screen 的 options 中配置 headerLargeTitle、animation、presentation: 'modal' 等原生行为。 四、UI 模式(高)。用 react-native-safe-area-context 的 SafeAreaView 处理安全区,配合 ScrollView 的 contentInsetAdjustmentBehavior;优先原生模态与原生上下文菜单(如 zeego/context-menu);用 Pressable 替代 TouchableOpacity。 五、状态管理(中)。通过选择器只订阅所需状态,减少重渲染;与 React Compiler 配合时解构 useSharedValue,Reanimated 回调内使用 'worklet' 指令。 六、monorepo(中)。原生依赖放在 app 包而非共享包,ui 包只放纯 React 组件;用根 package.json 的 resolutions 统一依赖版本。
使用方式:作为编码规范参考,逐项对照检查现有或新项目。
限制:资料未提供安装步骤、具体版本要求、性能实测数据、适用平台差异细节与费用信息。