rn-components-apislisted
Install: claude install-skill lukedj78/dev-flow
# rn-components-apis — guardrail for RN core components + platform APIs
## The 5 rules (non-negotiable)
1. **`Pressable` for any touchable** — never `TouchableOpacity` / `TouchableHighlight` / `TouchableWithoutFeedback` in new code.
2. **`expo-image` for any image** — never `Image` from `react-native` (no caching).
3. **`@shopify/flash-list` for lists** with > 20 items or unknown length — never `FlatList` at scale.
4. **`useWindowDimensions()` hook** in the component — never `Dimensions.get('window')` at module top-level (fails on rotation/foldables).
5. **`Platform.select({ ios, android })`** for platform-specific styles or behavior — never `Platform.OS === ...` ternaries scattered across the file.
## Quick decision tree
- "Which list primitive?" → `references/decision-tree.md` (ScrollView/FlatList/FlashList/SectionList)
- "Which touchable?" → always `Pressable`. See `references/patterns.md` for the canonical button pattern.
- "How do I open an external URL / mail / phone?" → `references/patterns.md` (Linking section)
- "Keyboard avoidance pattern?" → `references/patterns.md` (KeyboardAvoidingView + Android quirks)
- "None of these core components feel native enough for this screen" → these are all *RN* primitives (a JS abstraction over both platforms). For real native controls instead — SwiftUI on iOS, Jetpack Compose on Android (grouped settings sections, native picker/slider, real sheets) — that's `@expo/ui`, a different tool. See `rn-styling/references/expo-ui.md` (`