Learn React Native by building. Work through the lessons in order and you'll go from your first Expo app to a polished, publishable one — core components, Flexbox styling, navigation, lists, networking, storage, animations, native device features, testing, and shipping to the App Store and Google Play. Every lesson is code you run on a real phone.
React Native is React, rendering to native iOS and Android instead of the DOM — so the components, props, state, and hooks all come straight from React. Be comfortable with JavaScript and React first; this course assumes both and focuses on the mobile-specific parts.
Before you start
You need Node.js and the Expo toolchain — no Xcode or Android Studio required to begin. Create an app, then run it on your own phone with the free Expo Go app.
# scaffold and start an app
npx create-expo-app@latest my-app
cd my-app
npx expo startInstall Expo Go from the App Store or Google Play, then scan the QR code in the terminal to load the app on your phone. Prefer a simulator? Press i (iOS, needs Xcode on macOS) or a (Android, needs Android Studio), or w for the browser.
Your First App
Create a React Native app with Expo, run it on your phone, and make your first edit with instant reload — the fastest path from zero to a running app on a real device.
Core Components
There is no div or span — React Native gives you a set of native building blocks. Meet View, Text, Image, and the interactive components you assemble every screen from.
Styling with Flexbox
No CSS files — you style with JavaScript objects and lay out with Flexbox, which is the default in React Native. Learn StyleSheet, the flex model, and how it differs from the web.
Handling Input & Forms
Capture user input with TextInput, respond to taps with Pressable, and keep the keyboard from covering your form — the building blocks of every interactive screen.
Lists with FlatList
Rendering long lists is where mobile performance is won or lost. Use ScrollView for small content and FlatList for data — it only renders what is on screen.
Navigation
Apps have many screens. Wire them together with React Navigation — stack navigation for drill-down flows, tabs for top-level sections, and params to pass data between screens.
Networking & Data Fetching
Talk to APIs the same way you do on the web — fetch — but handle the mobile realities: loading and error states, flaky connectivity, and live updates over WebSockets.
Local Storage
Persist data on the device — key-value settings with AsyncStorage, secrets in the secure keychain with expo-secure-store, and structured data in a local SQLite database.
Authentication
Sign users in on mobile — run an OAuth login with expo-auth-session, keep the token in the secure store, and gate the app behind Face ID or a fingerprint.
Animations & Gestures
Smooth motion is what makes an app feel native. Animate with the built-in Animated API and Reanimated, and respond to drags and swipes with the gesture handler.
Platform-Specific Code
iOS and Android differ. Branch behavior with the Platform module, swap whole files with platform extensions, and even share code with the web via react-native-web.
Permissions & Device Features
Real apps use the camera, location, and notifications — all gated by permission. Request access the right way with Expo modules and handle the case where the user says no.
Push Notifications & Deep Linking
Bring users back into your app — send push notifications with Expo, and route incoming links and notification taps to the right screen with deep linking.
Performance
A janky app feels broken. Keep your UI at 60fps — optimize FlatList, avoid needless re-renders, run animations on the native thread, and profile to find the real bottleneck.
Testing
Ship with confidence — unit-test logic with Jest, test what users see with React Native Testing Library, and drive the real app end-to-end with Maestro.
Publishing Apps
Get your app into users’ hands — build installable binaries in the cloud with EAS, push instant JS updates over the air, and submit to the App Store and Google Play.