Stack Navigator — eine Komponente der React Navigation Bibliothek zur Verwaltung von Bildschirmen mobiler Anwendungen nach dem Stapelprinzip (LIFO). Jeder neue Bildschirm wird über den vorherigen gelegt, und die «Zurück»-Taste entfernt den oberen Bildschirm und bringt den Benutzer zum vorherigen zurück. Lesen Sie mehr über die Navigationsarchitektur in der offiziellen React Navigation Dokumentation.
Wichtige Punkte
Stack Navigator — einer der grundlegenden Navigatoren der React Navigation Bibliothek, der das Stapelmodell von Bildschirmen implementiert. Er bietet die für mobile Benutzer vertraute Navigation: Das Öffnen eines neuen Bildschirms wird von einer Slide-Rechts-Animation begleitet, und die «Zurück»-Taste oder die Wischgeste bringt den Benutzer zum vorherigen Bildschirm zurück. Stack Navigator unterstützt iOS und Android und verwendet native Plattformkomponenten für maximale Leistung.
React Navigation ist die beliebteste Navigationsbibliothek für React Native, die in 85% der Projekte installiert ist (laut npm-Daten, 2026). Stack Navigator ist Teil ihres Kerns und in zwei Implementierungen verfügbar: createNativeStackNavigator (nativ, empfohlen) und createStackNavigator (JavaScript, für komplexe benutzerdefinierte Animationen). Die native Version erschien in React Navigation v5 und wurde zum Standard in v6+.
Der Hauptvorteil von Stack Navigator — das natürliche Verhalten, das iOS- und Android-Benutzern vertraut ist. Auf iOS wird der Stapel visuell durch UINavigationController dargestellt, auf Android — durch FragmentManager mit Slide-Animation. Der Entwickler muss die Stapellogik nicht manuell implementieren — der Navigator verwaltet Bildschirmzustände, den Zurück-Stapel und Animationen automatisch.
Die Stack-Navigation basiert auf dem LIFO-Prinzip (Last In, First Out). Wenn ein Benutzer einen neuen Bildschirm öffnet, platziert der Navigator ihn oben auf dem Stapel. Bei Druck auf «Zurück» wird der obere Bildschirm entfernt und der Benutzer sieht den vorherigen. Der Stapel kann beliebig viele Bildschirme enthalten — die einzige Grenze ist der Gerätespeicher.
Jeder Bildschirm im Stapel behält seinen Zustand. Beim Zurückkehren zu einem vorherigen Bildschirm wird sein Zustand automatisch wiederhergestellt. Dies unterscheidet den Stapel von anderen Navigationstypen (Tab, Drawer), bei denen Bildschirme neu erstellt werden können. React Navigation verwaltet den Zustand über seinen eigenen Navigationskontextmechanismus.
| Aktion | Ergebnis | Beispiel |
|---|---|---|
| navigate | Platziert einen Bildschirm oben auf dem Stapel | navigation.navigate('Profile') |
| goBack | Entfernt den oberen Bildschirm aus dem Stapel | navigation.goBack() |
| push | Fügt einen neuen Bildschirm erzwingend hinzu | navigation.push('Profile') |
| popToTop | Kehrt zum Stammbildschirm zurück | navigation.popToTop() |
| reset | Ersetzt den gesamten Stapel durch einen neuen Satz | navigation.reset({ index: 0, routes: [...] }) |
Auf iOS unterstützt Stack Navigator eine Wischgeste vom linken Bildschirmrand zum Zurückgehen — dies ist das Standardverhalten von iOS, das Benutzer erwarten. Auf Android ist die Geste standardmäßig deaktiviert, kann aber über die Option gestureEnabled aktiviert werden. In Native Stack funktioniert die Geste nativ ohne Verzögerungen des JavaScript-Threads.
React Navigation bietet zwei Arten von Stack Navigator: Native Stack (createNativeStackNavigator) und JS Stack (createStackNavigator). Der Hauptunterschied — wo die Animation ausgeführt wird. Native Stack verwendet native Animations-Treiber von iOS und Android, während JS Stack über den JavaScript-Thread von React Native läuft. Die Wahl zwischen ihnen hängt von den Leistungs- und Anpassungsanforderungen ab.
Native Stack wird für die meisten Projekte empfohlen. Er bietet flüssige 60 FPS-Animationen ohne Blockierung des JS-Threads, unterstützt die System-Wisch-zurück-Geste auf iOS und verwendet native Übergänge — slide auf iOS, fade auf Android. Allerdings ist Native Stack bei der Anpassung von Animationen eingeschränkt: Nur ein vordefinierter Satz von Übergängen ist verfügbar.
JS Stack gibt die vollständige Kontrolle über Animationen über cardStyleInterpolator. Der Entwickler kann jede Animation erstellen: Skalierung, Rotation, Parallaxe, benutzerdefinierte Kurven. Der Nachteil — Animationen laufen im JS-Thread, was bei komplexen Übergängen auf schwachen Geräten zu Bildaussetzern führen kann. Für 70% der Projekte ist Native Stack mehr als ausreichend.
// Native Stack — empfohlene Implementierung
import { createNativeStackNavigator } from '@react-navigation/native-stack';
type RootStackParamList = {
Home: undefined;
Profile: { userId: string; name: string };
Settings: undefined;
};
const Stack = createNativeStackNavigator<RootStackParamList>();
function AppNavigator() {
return (
<Stack.Navigator screenOptions={{ headerShown: true }}>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Profile" component={ProfileScreen} />
<Stack.Screen name="Settings" component={SettingsScreen} />
</Stack.Navigator>
);
}Um mit Stack Navigator zu beginnen, müssen React Navigation und seine Abhängigkeiten installiert werden. Das minimale Set umfasst @react-navigation/native, @react-navigation/native-stack und react-native-screens. Nach der Installation wird die Anwendung in NavigationContainer eingewickelt — einen Kontext, der allen untergeordneten Komponenten den Navigationszustand bereitstellt.
# Installation der React Navigation Abhängigkeiten
npm install @react-navigation/native @react-navigation/native-stack
npm install react-native-screens react-native-safe-area-context
# Für iOS — pod installieren
cd ios && pod install && cd ..Nach der Installation wird Stack.Navigator mit bestimmten Bildschirmen erstellt, die in RootStackParamList definiert sind. Jeder Bildschirm wird über die component-Prop mit einer React-Komponente verbunden. Der Navigator kann Stamm oder in einem anderen Navigator (Tab, Drawer) verschachtelt sein. Für die Konfiguration werden screenOptions verwendet — entweder gemeinsam für alle Bildschirme oder individuell für jeden.
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
type RootStackParamList = {
Home: undefined;
Details: { itemId: number; title: string };
};
const Stack = createNativeStackNavigator<RootStackParamList>();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home"
screenOptions={{
headerStyle: { backgroundColor: '#6200ee' },
headerTintColor: '#fff',
gestureEnabled: true,
}}>
<Stack.Screen name="Home" component={HomeScreen}
options={{ title: 'Start' }} />
<Stack.Screen name="Details" component={DetailsScreen}
options={({ route }) => ({ title: route.params.title })} />
</Stack.Navigator>
</NavigationContainer>
);
}Stack Navigator bietet viele Optionen zur Anpassung von Aussehen und Verhalten. Die Hauptparameter werden über screenOptions auf Navigator-Ebene oder options auf Screen-Ebene festgelegt. Der Entwickler kann die Kopfzeile, die Übergangsanimation, die Wischgeste, den Kartenstil und die Hintergrundabdunklung konfigurieren. Die Flexibilität der Einstellungen ermöglicht es, die Navigation an das Designsystem der Anwendung anzupassen.
| Option | Typ | Beschreibung |
|---|---|---|
| headerShown | boolean | Kopfzeile des Bildschirms anzeigen oder ausblenden |
| headerStyle | object | Stil der Kopfzeilenleiste (backgroundColor, elevation) |
| headerBackTitle | string | Text der «Zurück»-Taste (iOS) |
| gestureEnabled | boolean | Wisch-zurück-Geste aktivieren |
| animation | string | Animationstyp: slide_from_right, fade, none |
| contentStyle | object | Stil des inneren Bildschirmbereichs |
Für JS Stack ermöglicht cardStyleInterpolator das Erstellen beliebiger Übergangsanimationen zwischen Bildschirmen. Dies ist ein leistungsstarkes Werkzeug zur Implementierung einzigartiger visueller Effekte: Skalierung, Rotation, Parallaxe, horizontaler Flip. Die Funktion erhält aktuelle Animationsfortschrittswerte (current, next) und gibt Stile für die zu animierenden Elemente zurück.
Stack Navigator unterstützt die vollständige Typisierung über TypeScript. Dazu wird RootStackParamList definiert — ein Objekttyp, bei dem die Schlüssel Bildschirmnamen und die Werte Parametertypen sind. Nach der Typisierung erhalten navigation.navigate und route.params Autovervollständigung und Typprüfung. Dadurch werden Parameterübergabefehler zur Kompilierzeit ausgeschlossen.
type RootStackParamList = {
Home: undefined;
Product: { id: string; category: string };
Checkout: { items: CartItem[]; total: number };
};
// Typisierter Bildschirm
type ProductScreenProps = NativeStackScreenProps<RootStackParamList, 'Product'>;
function ProductScreen({ navigation, route }: ProductScreenProps) {
const { id, category } = route.params;
return (
<View>
<Text>Produkt {id} — {category}</Text>
<Button title="In den Warenkorb"
onPress={() => navigation.navigate('Checkout', {
items: [{ id, quantity: 1 }],
total: 99.99,
})} />
</View>
);
}Stack Navigator unterstützt die Gruppierung von Bildschirmen und modale Fenster. Gruppen (Screen Group) ermöglichen das Anwenden gemeinsamer Einstellungen auf mehrere Bildschirme ohne Duplizierung. Modale Fenster werden über stack presentation: 'modal' implementiert — der Bildschirm öffnet sich von unten mit Hintergrundabdunklung, wie ein Systemmodal auf iOS. Diese Option ist nur in Native Stack verfügbar.
Für komplexe Navigation kann Stack Navigator in einem Tab Navigator oder Drawer Navigator verschachtelt werden. Beispielsweise hat der Tab «Start» seinen eigenen Bildschirmstapel und der Tab «Profil» seinen eigenen. Diese Zusammensetzung von Navigatoren ist der Standardansatz für Produktionsanwendungen. Jeder Stapel ist isoliert: Der Zurück-Stapel innerhalb eines Tabs beeinflusst andere Tabs nicht.
// Verschachtelter Stapel im Tab Navigator
const HomeStack = createNativeStackNavigator<HomeStackParamList>();
function HomeStackScreen() {
return (
<HomeStack.Navigator>
<HomeStack.Screen name="Feed" component={FeedScreen} />
<HomeStack.Screen name="PostDetail" component={PostDetailScreen}
options={{ presentation: 'modal' }} />
</HomeStack.Navigator>
);
}
// Bildschirmgruppen mit gemeinsamen Optionen
<Stack.Navigator>
<Stack.Group screenOptions={{ headerShown: true }}>
<Stack.Screen name="Main" component={MainScreen} />
<Stack.Screen name="About" component={AboutScreen} />
</Stack.Group>
<Stack.Screen name="Auth" component={AuthScreen}
options={{ presentation: 'modal', headerShown: false }} />
</Stack.Navigator>Häufig gestellte Fragen
navigate sucht zuerst nach einem vorhandenen Bildschirm mit diesem Namen im Stapel und navigiert dorthin, wenn er gefunden wird. push fügt immer einen neuen Bildschirm oben auf dem Stapel hinzu, auch wenn bereits einer vorhanden ist. push ist nützlich, wenn Sie denselben Bildschirm mit unterschiedlichen Daten öffnen müssen (z. B. ein Benutzerprofil).
Parameter werden als zweites Argument der navigate-Methode übergeben: navigation.navigate('Profile', { userId: '123', name: 'John' }). Auf dem empfangenden Bildschirm sind die Parameter über route.params verfügbar. Die Parametertypen werden in RootStackParamList für die Autovervollständigung in TypeScript definiert.
Stack Navigator eignet sich für lineare Navigation (Bildschirm → Details → Bearbeitung). Tab Navigator ist für parallele Abschnitte der Anwendung (Start, Suche, Profil). In Produktionsprojekten werden sie kombiniert: Der Tab Navigator enthält mehrere Stack Navigatoren für jeden Tab.
Standardmäßig fügt Stack Navigator eine «Zurück»-Taste in der Kopfzeile für alle Bildschirme außer dem Stammbildschirm hinzu. Auf iOS funktioniert auch die Wischgeste vom linken Rand. Die Methode navigation.goBack() entfernt den aktuellen Bildschirm aus dem Stapel und bringt den Benutzer zum vorherigen zurück.
Native Stack bietet vordefinierte Animationen: slide_from_right, fade, none. Für die vollständige Anpassung wird JS Stack mit cardStyleInterpolator verwendet — eine Funktion, die Kartenstile in jedem Animationsframe zurückgibt. Dies ermöglicht das Erstellen beliebiger Übergänge: Skalierung, Parallaxe, 3D-Rotation.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch