Expo Router v4 mit Claude Code: File-Based Navigation 2026

Expo Router bringt Next.js-artiges File-Based Routing zu React Native — eine Codebase fuer iOS, Android und Web. Claude Code generiert vollstaendige Routing-Architekturen mit Layouts, Deep Links und API Routes.

File-Based Routing: Struktur und Konventionen

RoutingVerzeichnisstruktur und spezielle Dateien

# Prompt: "Entwirf Expo Router Struktur fuer SaaS-App mit Auth" app/ _layout.tsx # Root Layout (Provider, Theme) index.tsx # / (Landing Page) (auth)/ # Gruppen-Prefix — kein URL-Segment! _layout.tsx # Auth-Layout (zentrierter Card) sign-in.tsx # /sign-in sign-up.tsx # /sign-up (app)/ # Geschuetzter Bereich _layout.tsx # App-Layout mit Tab-Bar (tabs)/ _layout.tsx # Tab-Navigator home.tsx # /home (Tab 1) explore.tsx # /explore (Tab 2) profile.tsx # /profile (Tab 3) project/ [id].tsx # /project/[id] (dynamisch) [id]/ settings.tsx # /project/[id]/settings +not-found.tsx # 404-Handler api/ # API Routes (Expo Router v4!) users+api.ts # GET/POST /api/users // _layout.tsx Root: import { Stack } from 'expo-router'; export default function RootLayout() { return ( <ThemeProvider> <Stack screenOptions={{ headerShown: false }}> <Stack.Screen name="(auth)" /> <Stack.Screen name="(app)" /> </Stack> </ThemeProvider> ); }

Layouts: Tab Navigator und Stack

LayoutsTabs mit Icons und Custom Header

// app/(app)/(tabs)/_layout.tsx import { Tabs } from 'expo-router'; import { Ionicons } from '@expo/vector-icons'; export default function TabLayout() { return ( <Tabs screenOptions={{ tabBarActiveTintColor: '#6366f1', tabBarStyle: { borderTopColor: '#e2e8f0' }, headerShown: false, }} > <Tabs.Screen name="home" options={{ title: "Home", tabBarIcon: ({ color, size }) => ( <Ionicons name="home" size={size} color={color} /> ), }} /> <Tabs.Screen name="explore" options={{ title: "Explore", tabBarIcon: ({ color, size }) => ( <Ionicons name="search" size={size} color={color} /> ), tabBarBadge: 3, // Notification Badge }} /> </Tabs> ); } // Stack mit Custom Header in einer Tab-Screen: export default function HomeTab() { return ( <Stack> <Stack.Screen name="index" options={{ title: "Dashboard" }} /> <Stack.Screen name="details" options={{ title: "Details", headerBackTitle: "Zurueck" }} /> </Stack> ); }
Navigation-Tipp: "Entwirf Expo Router Struktur fuer [App-Typ] mit Auth-Guard, Tab-Navigation und Modal-Screens." Claude Code generiert die gesamte Verzeichnisstruktur mit allen _layout.tsx Dateien.

Deep Links und Parameter

Deep LinksNavigation und URL-Parameter

// app/project/[id].tsx — Dynamische Route import { useLocalSearchParams, router, Link } from 'expo-router'; export default function ProjectScreen() { const { id } = useLocalSearchParams<{ id: string }>(); return ( <View> <Text>Project {id}</Text> // Typisierter Link: <Link href={`/project/${id}/settings`}>Settings</Link> // Programmatische Navigation: <Button title="Zurueck" onPress={() => router.back()} /> // Mit Params: <Button title="Edit" onPress={() => router.push({ pathname: '/project/[id]/edit', params: { id } })} /> </View> ); } // app.json — Deep Link Schema { "expo": { "scheme": "myapp", // myapp://project/123 oeffnet app/project/[id].tsx "web": { "bundler": "metro" } } }

API Routes (Expo Router v4)

API RoutesBackend direkt in der App

// app/api/users+api.ts — GET und POST Handler import { ExpoRequest, ExpoResponse } from 'expo-router/server'; export async function GET(req: ExpoRequest): Promise<ExpoResponse> { const users = await db.user.findMany(); return ExpoResponse.json(users); } export async function POST(req: ExpoRequest): Promise<ExpoResponse> { const body = await req.json(); const user = await db.user.create({ data: body }); return ExpoResponse.json(user, { status: 201 }); } // app/api/user/[id]+api.ts — Dynamische API Route: export async function GET(req: ExpoRequest, { id }: { id: string }) { const user = await db.user.findUnique({ where: { id } }); if (!user) return ExpoResponse.json({ error: 'Not found' }, { status: 404 }); return ExpoResponse.json(user); }
API Routes Limitation: Expo Router API Routes laufen nur auf Web und in EAS builds — nicht im Expo Go. Fuer Production: EAS Deploy oder separater API-Server empfohlen.

React Native im Kurs

Im Claude Code Mastery Kurs: vollstaendiges Expo Router Modul mit File-Based Routing, Layouts, Deep Links, API Routes und EAS-Deployment — inkl. Auth-Guard-Pattern und Universal App Architecture.

14 Tage kostenlos testen →