--- name: react-native-mobile-development description: Build and manage React Native/Expo mobile apps including project setup, development workflows, and platform-specific guidance. Use when working on mobile app development, configuration, or running apps. allowed-tools: Bash, Read, Write, Edit, Grep, Glob --- # React Native Mobile Development Guide for building mobile apps with React Native and Expo. ## When to Use - Setting up React Native/Expo projects - Running dev servers or builds - Creating mobile components - Handling platform-specific code (iOS/Android) - Configuring app.json or native modules - Troubleshooting mobile-specific issues ## Core Commands ```bash # Development npm start # Start Metro bundler npm run ios # Run on iOS Simulator npm run android # Run on Android Emulator # Expo specific npx expo start # Start with Expo CLI npx expo install PKG # Install compatible packages npx expo prebuild # Generate native code ``` ## Component Structure ```typescript // Mobile component template import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; interface Props { title: string; onPress: () => void; } export function MyComponent({ title, onPress }: Props) { return ( {title} ); } const styles = StyleSheet.create({ container: { padding: 16, backgroundColor: '#007AFF', borderRadius: 8, }, text: { color: '#FFFFFF', fontSize: 16, fontWeight: '600', }, }); ``` ## Platform-Specific Code ```typescript import { Platform } from 'react-native'; // Conditional rendering {Platform.OS === 'ios' && } {Platform.OS === 'android' && } // Platform-specific values const height = Platform.select({ ios: 44, android: 56, default: 50, }); // Platform-specific styles const styles = StyleSheet.create({ container: { ...Platform.select({ ios: { shadowColor: '#000', shadowOpacity: 0.3 }, android: { elevation: 4 }, }), }, }); ``` ## Best Practices 1. **Performance**: Use `StyleSheet.create()`, avoid inline styles, optimize images 2. **Accessibility**: Add `accessibilityLabel` and `accessibilityRole` 3. **Responsive**: Test on different screen sizes 4. **Navigation**: Use React Navigation or Expo Router 5. **State**: Keep component state minimal, use context/store for shared state ## Common Patterns ### Lists ```typescript import { FlatList } from 'react-native'; item.id} renderItem={({ item }) => } /> ``` ### Forms ```typescript import { TextInput } from 'react-native'; const [value, setValue] = useState(''); ``` ### Loading States ```typescript import { ActivityIndicator } from 'react-native'; {loading ? : } ``` ## Troubleshooting - **Metro won't start**: Clear cache with `npx expo start --clear` - **Native module error**: Run `npx expo prebuild --clean` - **Build fails**: Check `app.json` configuration - **Simulator issues**: Reset simulator or emulator ## Resources - [React Native Docs](https://reactnative.dev) - [Expo Docs](https://docs.expo.dev)