Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
jezweb avatar

React Native

  • 1.1k installs
  • 946 repo stars
  • Updated July 2, 2026
  • jezweb/claude-skills

react-native is an agent skill for React Native and Expo mobile development patterns.

About

The react-native skill documents React Native and Expo patterns for building performant mobile applications. It covers list virtualization performance, Reanimated animation workflows, navigation architecture, UI component patterns, state management, and platform-specific iOS versus Android code paths. Agents apply these conventions when refactoring slow screens, adding gestures, or structuring Expo projects for production release. The skill targets Claude Code mobile developers shipping cross-platform apps with modern RN tooling. React Native and Expo performance patterns for lists and screens. Reanimated animation and gesture handling guidance. Navigation, state management, and UI component conventions. Platform-specific iOS and Android code split patterns. Claude Code focused mobile development playbook. Apply React Native and Expo patterns for performant lists, Reanimated animations, navigation, and platform code.

  • React Native and Expo performance patterns for lists and screens.
  • Reanimated animation and gesture handling guidance.
  • Navigation, state management, and UI component conventions.
  • Platform-specific iOS and Android code split patterns.
  • Claude Code focused mobile development playbook.

React Native by the numbers

  • 1,105 all-time installs (skills.sh)
  • +28 installs in the week ending Jul 29, 2026 (Skillselion tracking)
  • Ranked #218 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 31, 2026 (Skillselion catalog sync)
From the docs

What react-native says it does

React Native and Expo patterns for building performant mobile apps.
SKILL.md
npx skills add https://github.com/jezweb/claude-skills --skill react-native

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1.1k
repo stars946
Security audit3 / 3 scanners passed
Last updatedJuly 2, 2026
Repositoryjezweb/claude-skills

What React Native or Expo patterns should I use for performance and navigation?

Apply React Native and Expo patterns for performant lists, Reanimated animations, navigation, and platform code.

Who is it for?

Mobile developers building or refactoring React Native and Expo applications.

Skip if: Skip for pure web React without React Native targets.

When should I use this skill?

User builds React Native apps, Expo projects, Reanimated animations, or mobile navigation.

What you get

Performant RN screens with Reanimated, navigation, and platform-specific patterns applied.

  • performance pattern audit
  • corrected RN component code
  • architecture recommendations

Files

SKILL.mdMarkdownGitHub ↗

React Native Patterns

Performance and architecture patterns for React Native + Expo apps. Rules ranked by impact — fix CRITICAL before touching MEDIUM.

This is a starting point. The skill will grow as you build more mobile apps.

When to Apply

  • Building new React Native or Expo apps
  • Optimising list and scroll performance
  • Implementing animations
  • Reviewing mobile code for performance issues
  • Setting up a new Expo project

1. List Performance (CRITICAL)

Lists are the #1 performance issue in React Native. A janky scroll kills the entire app experience.

PatternProblemFix
ScrollView for data<ScrollView> renders all items at onceUse <FlatList> or <FlashList> — virtualised, only renders visible items
Missing keyExtractorFlatList without keyExtractor → unnecessary re-renderskeyExtractor={(item) => item.id} — stable unique key per item
Complex renderItemExpensive component in renderItem re-renders on every scrollWrap in React.memo, extract to separate component
Inline functions in renderItemrenderItem={({ item }) => <Row onPress={() => nav(item.id)} />}Extract handler: const handlePress = useCallback(...)
No getItemLayoutFlatList measures every item on scroll (expensive)Provide getItemLayout for fixed-height items: (data, index) => ({ length: 80, offset: 80 * index, index })
FlashListFlatList is good, FlashList is better for large lists@shopify/flash-list — drop-in replacement, recycling architecture
Large images in listsFull-res images decoded on main threadUse expo-image with placeholder + transition, specify dimensions

FlatList Checklist

Every FlatList should have:

<FlatList
  data={items}
  keyExtractor={(item) => item.id}
  renderItem={renderItem}           // Memoised component
  getItemLayout={getItemLayout}     // If items are fixed height
  initialNumToRender={10}           // Don't render 100 items on mount
  maxToRenderPerBatch={10}          // Batch size for off-screen rendering
  windowSize={5}                    // How many screens to keep in memory
  removeClippedSubviews={true}      // Unmount off-screen items (Android)
/>

2. Animations (HIGH)

Native animations run on the UI thread. JS animations block the JS thread and cause jank.

PatternProblemFix
Animated API for complex animationsAnimated runs on JS thread, blocks interactionsUse react-native-reanimated — runs on UI thread
Layout animationItem appears/disappears with no transitionLayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
Shared element transitionsNavigate between screens, element teleportsreact-native-reanimated shared transitions or expo-router shared elements
Gesture + animationDrag/swipe feels laggyreact-native-gesture-handler + reanimated worklets — all on UI thread
Measuring layoutonLayout fires too late, causes flashUse useAnimatedStyle with shared values for instant response

Reanimated Basics

import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated';

function AnimatedBox() {
  const offset = useSharedValue(0);
  const style = useAnimatedStyle(() => ({
    transform: [{ translateX: withSpring(offset.value) }],
  }));

  return (
    <GestureDetector gesture={panGesture}>
      <Animated.View style={[styles.box, style]} />
    </GestureDetector>
  );
}

3. Navigation (HIGH)

PatternProblemFix
Expo RouterFile-based routing (like Next.js) for React Nativeapp/ directory with _layout.tsx files. Preferred for new Expo projects.
Heavy screens on stackEvery screen stays mounted in the stackUse unmountOnBlur: true for screens that don't need to persist
Deep linkingApp doesn't respond to URLsExpo Router handles this automatically. For bare RN: Linking API config
Tab badge updatesBadge count doesn't update when tab is focusedUse useIsFocused() or refetch on focus: useFocusEffect(useCallback(...))
Navigation state persistenceApp loses position on background/killonStateChange + initialState with AsyncStorage

Expo Router Structure

app/
├── _layout.tsx          # Root layout (tab navigator)
├── index.tsx            # Home tab
├── (tabs)/
│   ├── _layout.tsx      # Tab bar config
│   ├── home.tsx
│   ├── search.tsx
│   └── profile.tsx
├── [id].tsx             # Dynamic route
└── modal.tsx            # Modal route

4. UI Patterns (HIGH)

PatternProblemFix
Safe areaContent under notch or home indicator<SafeAreaView> or useSafeAreaInsets() from react-native-safe-area-context
Keyboard avoidanceForm fields hidden behind keyboard<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : 'height'}>
Platform-specific codeiOS and Android need different behaviourPlatform.select({ ios: ..., android: ... }) or .ios.tsx / .android.tsx files
Status barStatus bar overlaps content or wrong colour<StatusBar style="auto" /> from expo-status-bar in root layout
Touch targetsButtons too small to tapMinimum 44x44pt. Use hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
Haptic feedbackTaps feel deadexpo-hapticsHaptics.impactAsync(Haptics.ImpactFeedbackStyle.Light) on important actions

5. Images and Media (MEDIUM)

PatternProblemFix
Image component<Image> from react-native is basicUse expo-image — caching, placeholder, transition, blurhash
Remote images without dimensionsLayout shift when image loadsAlways specify width and height, or use aspectRatio
Large imagesOOM crashes on AndroidResize server-side or use expo-image which handles memory
SVGSVG support isn't nativereact-native-svg + react-native-svg-transformer for SVG imports
VideoVideo playbackexpo-av or expo-video (newer API)

6. State and Data (MEDIUM)

PatternProblemFix
AsyncStorage for complex dataJSON parse/stringify on every readUse MMKV (react-native-mmkv) — 30x faster than AsyncStorage
Global stateRedux/MobX boilerplate for simple stateZustand — minimal, works great with React Native
Server stateManual fetch + loading + error + cacheTanStack Query — same as web, works in React Native
Offline firstApp unusable without networkTanStack Query persistQueryClient + MMKV, or WatermelonDB for complex offline
Deep state updatesSpread operator hell for nested objectsImmer via Zustand: set(produce(state => { state.user.name = 'new' }))

7. Expo Workflow (MEDIUM)

PatternWhenHow
Development buildNeed native modulesnpx expo run:ios or eas build --profile development
Expo GoQuick prototyping, no native modulesnpx expo start — scan QR code
EAS BuildCI/CD, app store buildseas build --platform ios --profile production
EAS UpdateHot fix without app store revieweas update --branch production --message "Fix bug"
Config pluginsModify native config without ejectingapp.config.ts with expo-build-properties or custom config plugin
Environment variablesDifferent configs per buildeas.json build profiles + expo-constants

New Project Setup

npx create-expo-app my-app --template tabs
cd my-app
npx expo install expo-image react-native-reanimated react-native-gesture-handler react-native-safe-area-context

8. Testing (LOW-MEDIUM)

ToolForSetup
JestUnit tests, hook testsIncluded with Expo by default
React Native Testing LibraryComponent tests@testing-library/react-native
DetoxE2E tests on real devices/simulatorsdetox — Wix's testing framework
MaestroE2E with YAML flowsmaestro test flow.yaml — simpler than Detox

Common Gotchas

GotchaFix
Metro bundler cachenpx expo start --clear
Pod install issues (iOS)cd ios && pod install --repo-update
Reanimated not workingMust be first import: import 'react-native-reanimated' in root
Expo SDK upgradenpx expo install --fix after updating SDK version
Android build failsCheck gradle.properties for memory: org.gradle.jvmargs=-Xmx4g
iOS simulator slowUse physical device for performance testing — simulator doesn't reflect real perf

Related skills

How it compares

Pick react-native over generic React web skills when the codebase targets iOS/Android via React Native or Expo and needs mobile-specific performance rules.

FAQ

Does it cover Expo?

Yes; Expo patterns are included alongside bare React Native guidance.

What animation library?

Reanimated for performant gesture and animation workflows.

Which runtime is targeted?

Claude Code mobile development workflows with React Native.

Is React Native safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.