Marketplace react-native-dev
git clone https://github.com/aiskillstore/marketplace
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/minimax-ai/react-native-dev" ~/.claude/skills/aiskillstore-marketplace-react-native-dev && rm -rf "$T"
skills/minimax-ai/react-native-dev/SKILL.mdReact Native & Expo Development Guide
A practical guide for building production-ready React Native and Expo applications. Covers UI, animations, state, testing, performance, and deployment.
References
Consult these resources as needed:
- references/navigation.md — Expo Router: Stack, Tabs, NativeTabs (
,headerLargeTitle
), links, modals, sheets, context menusheaderBackButtonDisplayMode - references/components.md — FlashList patterns,
, safe areas (expo-image
), native controls, blur/glass effects, storagecontentInsetAdjustmentBehavior - references/styling.md — StyleSheet, NativeWind/Tailwind, platform styles, theming, dark mode
- references/animations.md — Reanimated 3: entering/exiting, shared values, gestures, scroll-driven
- references/state-management.md — Zustand (selectors, persist), Jotai (atoms, derived), React Query, Context
- references/forms.md — React Hook Form + Zod: validation, multi-step, dynamic arrays
- references/networking.md — fetch wrapper, React Query (optimistic updates), auth tokens, offline, API routes, webhooks
- references/performance.md — Profiling workflow, FlashList +
, bundle analysis, TTI, memory leaks, animation perfmemo - references/testing.md — Jest, React Native Testing Library, E2E with Maestro
- references/native-capabilities.md — Camera, location, permissions (
hooks), haptics, notifications, biometricsuse*Permissions - references/engineering.md — Project layout (
,components/ui/
,stores/
), path aliases, SDK upgrades, EAS build/submit, CI/CD, DOM componentsservices/
Quick Reference
Component Preferences
| Purpose | Use | Instead of |
|---|---|---|
| Lists | () + items | (no view recycling) |
| Images | | RN (no cache, no WebP) |
| Press | | (legacy) |
| Audio | | (deprecated) |
| Video | | (deprecated) |
| Animations | Reanimated 3 | RN Animated API (limited) |
| Gestures | Gesture Handler | PanResponder (legacy) |
| Platform check | | |
| Context | | (React 18) |
| Safe area scroll | | |
| SF Symbols | with | |
Scaling Up
| Situation | Consider |
|---|---|
| Long lists with scroll jank | Virtualized list libraries (e.g. FlashList) |
| Want Tailwind-style classes | NativeWind v4 |
| High-frequency storage reads | Sync-based storage (e.g. MMKV) |
| New project with Expo | Expo Router over bare React Navigation |
State Management
| State Type | Solution |
|---|---|
| Local UI state | / |
| Shared app state | Zustand or Jotai |
| Server / async data | React Query |
| Form state | React Hook Form + Zod |
Performance Priorities
| Priority | Issue | Fix |
|---|---|---|
| CRITICAL | Long list jank | + memoized items |
| CRITICAL | Large bundle | Avoid barrel imports, enable R8 |
| HIGH | Too many re-renders | Zustand selectors, React Compiler |
| HIGH | Slow startup | Disable bundle compression, native nav |
| MEDIUM | Animation drops | Only animate / |
New Project Init
# 1. Create project npx create-expo-app@latest my-app --template blank-typescript cd my-app # 2. Install Expo Router + core deps npx expo install expo-router react-native-safe-area-context react-native-screens # 3. (Optional) Common extras npx expo install expo-image react-native-reanimated react-native-gesture-handler
Then configure:
- Set entry point in
:package.json"main": "expo-router/entry" - Add scheme in
:app.json"scheme": "my-app" - Delete
andApp.tsxindex.ts - Create
as root Stack layoutapp/_layout.tsx - Create
for tab navigationapp/(tabs)/_layout.tsx - Create route files in
(see navigation.md)app/(tabs)/
For web support, also install:
npx expo install react-native-web react-dom @expo/metro-runtime
Core Principles
Consult references before writing: when implementing navigation, lists, networking, or project setup, read the matching reference file above for patterns and pitfalls.
Try Expo Go first (
npx expo start). Custom builds (eas build) only needed when using local Expo modules, Apple targets, or third-party native modules not in Expo Go.
Conditional rendering: use
{count > 0 && <Text />} not {count && <Text />} (renders "0").
Animation rule: only animate
transform and opacity — GPU-composited, no layout thrash.
Imports: always import directly from source, not barrel files — avoids bundle bloat.
Lists and images: before using
FlatList or RN Image, check the Component Preferences table above — FlashList and expo-image are almost always the right choice.
Route files: always use kebab-case, never co-locate components/types/utils in
app/.
Checklist
New Project Setup
-
path aliases configuredtsconfig.json -
env var set per environmentEXPO_PUBLIC_API_URL - Root layout has
(if using gestures)GestureHandlerRootView -
on all scroll viewscontentInsetAdjustmentBehavior="automatic" -
instead ofFlashList
for lists > 20 itemsFlatList
Before Shipping
- Profile in
mode, fix frames > 16ms--profile - Bundle analyzed (
), no barrel importssource-map-explorer - R8 enabled for Android
- Unit + component tests for critical paths
- E2E flows for login, core feature, checkout
Flutter development → see
flutter-dev skill.
iOS native (UIKit/SwiftUI) → see ios-application-dev skill.
Android native (Kotlin/Compose) → see android-native-dev skill.
React Native is a trademark of Meta Platforms, Inc. Expo is a trademark of 650 Industries, Inc. All other product names are trademarks of their respective owners.