A comprehensive collection of React Native exercises and mini-projects built with Expo. This repository showcases my journey learning mobile app development, covering fundamental concepts to advanced implementations across iOS and Android platforms.
This repository contains various React Native practice projects and exercises designed to master mobile development concepts. Each project demonstrates different aspects of React Native development, from basic components to complex navigation patterns and native device features.
- π React Native Components - View, Text, ScrollView, FlatList, SectionList
- π¨ Styling - StyleSheet, Flexbox layouts, responsive design
- π State Management - useState, useEffect, Context API
- π§ Navigation - Stack, Tab, and Drawer navigation with React Navigation
- π² Native Features - Camera, location, push notifications
- π― User Input - Forms, gestures, and touch handling
- π API Integration - Fetch data, handle async operations
- πΎ Data Persistence - AsyncStorage, SQLite
- iOS Features - iOS-specific components and styling
- Android Features - Android-specific implementations
- Cross-Platform - Write once, run everywhere approach
- React Native - Cross-platform mobile framework
- Expo SDK 51 - Development platform and libraries
- JavaScript/TypeScript - Programming languages
- React Hooks - Modern React patterns
- React Navigation - Routing and navigation
- Expo Router - File-based routing
- React Native Elements - UI toolkit
- Expo AV - Audio and video functionality
- Expo Camera - Camera access
- Expo Location - GPS and location services
- React Native Reanimated - Smooth animations
- React Native Gesture Handler - Touch gestures
- Expo Go - Testing on physical devices
- EAS Build - Cloud build service
- Metro Bundler - JavaScript bundler
- ESLint & Prettier - Code quality tools
practice-react-native/
βββ 01-basics/
β βββ components-demo/
β βββ styling-flexbox/
β βββ state-props/
βββ 02-navigation/
β βββ stack-navigation/
β βββ tab-navigation/
β βββ drawer-navigation/
βββ 03-lists-data/
β βββ flatlist-example/
β βββ sectionlist-demo/
β βββ api-integration/
βββ 04-forms-input/
β βββ text-input/
β βββ form-validation/
β βββ picker-components/
βββ 05-native-features/
β βββ camera-app/
β βββ location-tracker/
β βββ push-notifications/
β βββ media-library/
βββ 06-animations/
β βββ basic-animations/
β βββ gesture-animations/
β βββ layout-animations/
βββ 07-mini-projects/
β βββ todo-app/
β βββ weather-app/
β βββ expense-tracker/
β βββ recipe-finder/
βββ assets/
β βββ images/
β βββ fonts/
β βββ icons/
βββ components/
β βββ shared/
βββ utils/
β βββ helpers.js
βββ app.json
βββ App.js
βββ package.json
βββ README.md
Understanding core React Native components and their properties.
import { View, Text, Image, ScrollView } from 'react-native';
export default function ComponentDemo() {
return (
<ScrollView>
<View style={styles.container}>
<Text style={styles.title}>Hello React Native!</Text>
<Image
source={{ uri: 'https://example.com/image.jpg' }}
style={styles.image}
/>
</View>
</ScrollView>
);
}Mastering responsive layouts with Flexbox.
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
padding: 20,
},
box: {
width: 100,
height: 100,
backgroundColor: '#3498db',
borderRadius: 10,
}
});Setting up navigation between screens.
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}Fetching and displaying data from external APIs.
const [data, setData] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchData();
}, []);
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
const json = await response.json();
setData(json);
} catch (error) {
console.error(error);
} finally {
setLoading(false);
}
};Accessing camera and handling permissions.
import { Camera } from 'expo-camera';
const [hasPermission, setHasPermission] = useState(null);
useEffect(() => {
(async () => {
const { status } = await Camera.requestCameraPermissionsAsync();
setHasPermission(status === 'granted');
})();
}, []);- CRUD operations
- AsyncStorage for persistence
- Swipe to delete
- Mark as complete
- Current location weather
- Search by city
- 5-day forecast
- Beautiful UI with weather animations
- Add/edit/delete expenses
- Categories and tags
- Monthly reports
- Charts and statistics
- Search recipes by ingredients
- Save favorites
- Step-by-step instructions
- Shopping list generation
- Node.js (v14 or higher)
- npm or yarn
- Expo CLI
- iOS Simulator (Mac) or Android Emulator
- Expo Go app on your phone
-
Clone the repository
git clone https://github.com/jefercort/practice-react-native.git cd practice-react-native -
Install dependencies
npm install # or yarn install -
Start the development server
npx expo start # or expo start -
Run on device/emulator
- Press
afor Android emulator - Press
ifor iOS simulator - Scan QR code with Expo Go app on your phone
- Press
Navigate to specific exercise directories:
cd 01-basics/components-demo
npx expo startThis project uses multiple styling approaches:
- StyleSheet API - Performance optimized styles
- Inline Styles - Quick prototyping
- Styled Components - Component-based styling
- Platform-specific styles - iOS/Android variations
# Run tests
npm test
# Run with coverage
npm run test:coverage- Cross-platform Development - One codebase for iOS and Android
- Component Lifecycle - Understanding mounting, updating, unmounting
- Performance Optimization - FlatList, memo, lazy loading
- Debugging - React Native Debugger, Flipper
- State Management - Local and global state patterns
- Async Operations - Promises, async/await, error handling
- Component reusability
- Separation of concerns
- Responsive design principles
- Accessibility features
- Performance monitoring
- Error boundaries
- Add TypeScript support
- Implement Redux for state management
- Add unit and integration tests
- Create custom native modules
- Implement CI/CD with EAS Build
- Add offline support
- Implement deep linking
- Add biometric authentication
- Create animated onboarding
- Add internationalization (i18n)
- Implement push notifications
- Add dark mode support
# iOS
eas build --platform ios
# Android
eas build --platform android
# Both platforms
eas build --platform allContributions are welcome! Feel free to submit issues and pull requests.
- Fork the repository
- Create your feature branch (
git checkout -b feature/NewExercise) - Commit your changes (
git commit -m 'Add new exercise') - Push to the branch (
git push origin feature/NewExercise) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Kevin Cortes
- GitHub: @jefercort
- LinkedIn: Kevin Cortes PRO
- Portfolio: PRO ENGINEERING
- Expo Documentation
- React Native Documentation
- React Native community for amazing tutorials
- All open-source contributors
β If you find this repository helpful, please give it a star!
π Happy Coding with React Native!