"Learn once, write anywhere." React Native lets web developers ship truly native iOS & Android apps using JavaScript or TypeScript and the React mental model.
← Back to Client Sideimport { useEffect, useState } from "react"; import { FlatList, Text, View, ActivityIndicator } from "react-native"; export default function ProductList() { const [products, setProducts] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetch("/api/products") .then(r => r.json()) .then(data => { setProducts(data); setLoading(false); }); }, []); if (loading) return <ActivityIndicator />; return ( <FlatList data={products} keyExtractor={p => p.id} renderItem={({ item }) => ( <View style={{ padding: 12 }}> <Text>{item.name} — ${item.price}</Text> </View> )} /> ); }
Expo is the default way to start a React Native app today — managed builds (EAS Build), OTA updates (EAS Update), file-based routing (Expo Router), config plugins, and a huge SDK of native APIs without ejecting.
React Navigation is the de-facto router — stack, tabs, drawer, modal navigators with native gestures and animations. Expo Router layers file-based routing on top.
| Library | Purpose |
|---|---|
| NativeWind / Tamagui / Restyle | Styling systems (Tailwind, design-system). |
| Reanimated 3 | 60-FPS animations on the UI thread. |
| React Native Skia | 2D graphics with the same Skia engine Flutter uses. |
| TanStack Query / Zustand / Redux | Same data & state libs as React web. |
| RevenueCat / Stripe / Sentry | First-class native SDKs. |
Reuse React skills, JS tooling, and even some code via React Native Web.
Discord, Instagram, Bluesky — chat, feeds, media-heavy UX.
One team ships iOS + Android + web in parallel.
EAS Update / CodePush ship JS-only fixes without app store review.