MO

mobile-react-native

Helps you build cross-platform mobile apps using React Native and Expo with pre-configured navigation and styling.

Install

mkdir -p .claude/skills/mobile-react-native && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11839" && unzip -o skill.zip -d .claude/skills/mobile-react-native && rm skill.zip

Installs to .claude/skills/mobile-react-native

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

React Native development with Expo, navigation, native modules, and cross-platform patterns
91 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Initialize new React Native projects with Expo
  • Implement navigation structures using React Navigation (Stack, Tab navigators)
  • Apply cross-platform styling with StyleSheet and `useWindowDimensions`
  • Manage application state using Zustand with persistence
  • Perform API calls and manage data fetching with React Query
  • Integrate native modules via Expo (Location, ImagePicker, Notifications)

How it works

This skill provides guidance and code examples for React Native development using Expo, covering project setup, navigation, styling, state management, API calls, and native module integration.

Inputs & outputs

You give it
Project name, screen components, navigation routes, styling definitions, state management logic, API endpoints, native module requests
You get back
Initialized Expo project, navigable mobile application, styled UI components, managed application state, fetched API data, native device functionalities

When to use mobile-react-native

  • Initializing new React Native projects with Expo
  • Setting up stack and tab navigation flows
  • Writing platform-specific styling
  • Managing mobile app component structure

About this skill

React Native Development Skill

Build cross-platform mobile apps.

Expo Setup

npx create-expo-app@latest my-app
cd my-app
npx expo start

Navigation

import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

const Stack = createNativeStackNavigator();
const Tab = createBottomTabNavigator();

function HomeStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
      <Stack.Screen name="Details" component={DetailsScreen} />
    </Stack.Navigator>
  );
}

export default function App() {
  return (
    <NavigationContainer>
      <Tab.Navigator>
        <Tab.Screen 
          name="HomeTab" 
          component={HomeStack}
          options={{ tabBarIcon: ({color}) => <HomeIcon color={color} /> }}
        />
        <Tab.Screen name="Profile" component={ProfileScreen} />
      </Tab.Navigator>
    </NavigationContainer>
  );
}

Styling

import { StyleSheet, View, Text, useWindowDimensions } from 'react-native';

function Card({ title, children }) {
  const { width } = useWindowDimensions();
  const isTablet = width > 768;
  
  return (
    <View style={[styles.card, isTablet && styles.cardTablet]}>
      <Text style={styles.title}>{title}</Text>
      {children}
    </View>
  );
}

const styles = StyleSheet.create({
  card: {
    backgroundColor: '#fff',
    borderRadius: 12,
    padding: 16,
    marginVertical: 8,
    shadowColor: '#000',
    shadowOffset: { width: 0, height: 2 },
    shadowOpacity: 0.1,
    shadowRadius: 8,
    elevation: 3
  },
  cardTablet: {
    maxWidth: 600,
    alignSelf: 'center'
  },
  title: {
    fontSize: 18,
    fontWeight: '600',
    marginBottom: 8
  }
});

State Management

import { create } from 'zustand';
import { persist, createJSONStorage } from 'zustand/middleware';
import AsyncStorage from '@react-native-async-storage/async-storage';

const useStore = create(
  persist(
    (set) => ({
      user: null,
      setUser: (user) => set({ user }),
      logout: () => set({ user: null })
    }),
    {
      name: 'user-storage',
      storage: createJSONStorage(() => AsyncStorage)
    }
  )
);

API Calls

import { useQuery, useMutation } from '@tanstack/react-query';

function UserList() {
  const { data, isLoading, error, refetch } = useQuery({
    queryKey: ['users'],
    queryFn: () => fetch('/api/users').then(r => r.json())
  });

  if (isLoading) return <ActivityIndicator />;
  
  return (
    <FlatList
      data={data}
      keyExtractor={item => item.id}
      renderItem={({ item }) => <UserCard user={item} />}
      onRefresh={refetch}
      refreshing={isLoading}
    />
  );
}

Native Modules (Expo)

import * as Location from 'expo-location';
import * as ImagePicker from 'expo-image-picker';
import * as Notifications from 'expo-notifications';

async function getLocation() {
  const { status } = await Location.requestForegroundPermissionsAsync();
  if (status !== 'granted') return null;
  
  return Location.getCurrentPositionAsync({});
}

async function pickImage() {
  const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
  if (status !== 'granted') return null;
  
  return ImagePicker.launchImageLibraryAsync({
    mediaTypes: ImagePicker.MediaTypeOptions.Images,
    allowsEditing: true,
    quality: 0.8
  });
}

Best Practices

  1. Use FlatList for long lists (not ScrollView)
  2. Memoize expensive components
  3. Handle offline states
  4. Test on real devices
  5. Use Hermes for performance

When not to use it

  • When developing for a single platform without cross-platform requirements
  • When not using Expo for React Native development
  • When a simpler state management solution is preferred over Zustand

Limitations

  • Requires `npx create-expo-app` for project initialization
  • Navigation examples use `@react-navigation/native` and related libraries
  • State management examples use Zustand and `AsyncStorage`

How it compares

This skill offers a complete, Expo-centric approach to React Native development, providing structured patterns for common mobile app features, unlike generic React Native tutorials.

Compared to similar skills

mobile-react-native side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
mobile-react-native (this skill)06moReviewIntermediate
json-render-react-native15moNo flagsIntermediate
react-native-architecture552moReviewAdvanced
react-native-design332moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry