Stack Navigator: co to je, zásobníková navigace v React Native

Autor: IT Sectr Publikováno: 2026-02-22 Doba čtení: 11 min

Stack Navigator — komponent knihovny React Navigation pro správu obrazovek mobilní aplikace na principu zásobníku (LIFO). Každá nová obrazovka je umístěna na předchozí a tlačítko «Zpět» odebere horní obrazovku a vrátí uživatele k předchozí. Více o architektuře navigace si přečtěte v oficiální dokumentaci React Navigation.

Hlavní body

  • Stack Navigator — komponent React Navigation pro správu obrazovek na principu zásobníku (LIFO)
  • Zásobníková navigace — každá obrazovka je položena na předchozí; tlačítko «Zpět» odebere aktuální obrazovku
  • Native Stack — nativní implementace přes UINavigationController (iOS) a Fragment (Android)
  • Animace — vestavěné přechody (slide, fade, none) a vlastní animace přes cardStyleInterpolator
  • TypeScript — plná typizace parametrů navigace přes RootStackParamList

Co je Stack Navigator?

Stack Navigator — jeden ze základních navigátorů knihovny React Navigation, který implementuje zásobníkový model obrazovek. Poskytuje navigaci známou mobilním uživatelům: otevření nové obrazovky je doprovázeno animací vjezdu zprava a tlačítko «Zpět» nebo gesto přejetí vrátí uživatele na předchozí obrazovku. Stack Navigator je podporován na iOS a Android, využívající nativní komponenty platformy pro maximální výkon.

React Navigation je nejoblíbenější knihovna navigace pro React Native, nainstalovaná v 85% projektů (podle dat npm, 2026). Stack Navigator je součástí jejího jádra a je dostupný ve dvou implementacích: createNativeStackNavigator (nativní, doporučená) a createStackNavigator (JavaScript, pro složité vlastní animace). Nativní verze se objevila v React Navigation v5 a stala se standardem v v6+.

Hlavní výhoda Stack Navigator — přirozené chování, známé uživatelům iOS a Android. Na iOS je zásobník vizuálně reprezentován jako UINavigationController, na Android — jako FragmentManager s animací slide. Vývojář nemusí ručně implementovat logiku zásobníku — navigátor automaticky spravuje stavy obrazovek, back stack a animace.

Jak funguje zásobníková navigace

Zásobníková navigace je založena na principu LIFO (Last In, First Out). Když uživatel otevře novou obrazovku, navigátor ji umístí na vrchol zásobníku. Po stisknutí «Zpět» je horní obrazovka odstraněna a uživatel vidí předchozí. Zásobník může obsahovat libovolný počet obrazovek — omezen je pouze pamětí zařízení.

Každá obrazovka v zásobníku si uchovává svůj stav. Při návratu na předchozí obrazovku se její stav automaticky obnoví. Toto odlišuje zásobník od jiných typů navigace (Tab, Drawer), kde mohou být obrazovky znovu vytvořeny. React Navigation spravuje stav prostřednictvím vlastního mechanismu navigačního kontextu.

AkceVýsledekPříklad
navigateUmístí obrazovku na vrchol zásobníkunavigation.navigate('Profile')
goBackOdebere horní obrazovku ze zásobníkunavigation.goBack()
pushVynuceně přidá novou obrazovkunavigation.push('Profile')
popToTopVrátí na kořenovou obrazovkunavigation.popToTop()
resetNahradí celý zásobník novou sadounavigation.reset({ index: 0, routes: [...] })

Gesto přejetí pro návrat

Na iOS Stack Navigator podporuje gesto přejetí z levého okraje obrazovky pro návrat — to je standardní chování iOS, které uživatelé očekávají. Na Android je gesto ve výchozím nastavení vypnuto, ale lze jej zapnout pomocí možnosti gestureEnabled. V Native Stack gesto funguje nativně, bez zpoždění JavaScriptového vlákna.

Native Stack vs JS Stack

React Navigation nabízí dva typy Stack Navigator: Native Stack (createNativeStackNavigator) a JS Stack (createStackNavigator). Hlavní rozdíl je místo provádění animace. Native Stack používá nativní ovladače animací iOS a Android, zatímco JS Stack pracuje přes JavaScriptové vlákno React Native. Volba mezi nimi závisí na požadavcích na výkon a přizpůsobení.

Native Stack je doporučen pro většinu projektů. Poskytuje plynulé animace 60 FPS bez blokování JS vlákna, podporuje systémové gesto přejetí na iOS a používá nativní přechody — slide na iOS, fade na Android. Native Stack je však omezen v přizpůsobení animací: k dispozici je pouze předdefinovaná sada přechodů.

JS Stack dává plnou kontrolu nad animacemi přes cardStyleInterpolator. Vývojář může vytvořit jakoukoli animaci: škálování, rotaci, paralaxu, vlastní křivky. Nevýhoda — animace běží v JS vlákně, což může způsobit pokles snímků na slabších zařízeních při složitých přechodech. Pro 70% projektů je Native Stack zcela dostačující.

typescript
// Native Stack — doporučená implementace
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>
  );
}

Instalace a nastavení Stack Navigator

Pro zahájení práce s Stack Navigator je třeba nainstalovat React Navigation a jeho závislosti. Minimální sada zahrnuje @react-navigation/native, @react-navigation/native-stack a react-native-screens. Po instalaci je aplikace zabalena do NavigationContainer — kontextu, který poskytuje navigační stav všem podřízeným komponentám.

bash
# Instalace závislostí React Navigation
npm install @react-navigation/native @react-navigation/native-stack
npm install react-native-screens react-native-safe-area-context

# Pro iOS — instalace pod
cd ios && pod install && cd ..

Po instalaci je vytvořen Stack.Navigator s definovanými obrazovkami v RootStackParamList. Každá obrazovka je propojena s React komponentou přes prop component. Navigátor může být kořenový nebo vnořený do jiného navigátoru (Tab, Drawer). Pro konfiguraci se používají screenOptions — společné pro všechny obrazovky nebo individuální pro každou.

typescript
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: 'Domů' }} />
        <Stack.Screen name="Details" component={DetailsScreen}
          options={({ route }) => ({ title: route.params.title })} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

Parametry a přizpůsobení Stack Navigator

Stack Navigator nabízí mnoho možností pro přizpůsobení vzhledu a chování. Hlavní parametry se nastavují přes screenOptions na úrovni Navigator nebo options na úrovni Screen. Vývojář může nakonfigurovat nadpis, animaci přechodu, gesto přejetí, styl karty a ztmavení pozadí. Flexibilita nastavení umožňuje přizpůsobit navigaci designovému systému aplikace.

MožnostTypPopis
headerShownbooleanZobrazit nebo skrýt nadpis obrazovky
headerStyleobjectStyl panelu nadpisu (backgroundColor, elevation)
headerBackTitlestringText tlačítka «Zpět» (iOS)
gestureEnabledbooleanPovolit gesto přejetí pro návrat
animationstringTyp animace: slide_from_right, fade, none
contentStyleobjectStyl vnitřní oblasti obrazovky

Vlastní animace přes cardStyleInterpolator

Pro JS Stack umožňuje cardStyleInterpolator vytvářet libovolné přechodové animace mezi obrazovkami. Je to výkonný nástroj pro implementaci jedinečných vizuálních efektů: škálování, rotace, paralaxa, horizontální flip. Funkce přijímá aktuální hodnoty průběhu animace (current, next) a vrací styly pro animované prvky.

Typizace navigace s TypeScript

Stack Navigator podporuje plnou typizaci přes TypeScript. K tomu se definuje RootStackParamList — typ-objekt, kde klíče jsou názvy obrazovek a hodnoty jsou typy parametrů. Po typizaci získávají navigation.navigate a route.params automatické doplňování a kontrolu typů. To eliminuje chyby při předávání parametrů ve fázi kompilace.

typescript
type RootStackParamList = {
  Home: undefined;
  Product: { id: string; category: string };
  Checkout: { items: CartItem[]; total: number };
};

// Typizovaná obrazovka
type ProductScreenProps = NativeStackScreenProps<RootStackParamList, 'Product'>;

function ProductScreen({ navigation, route }: ProductScreenProps) {
  const { id, category } = route.params;

  return (
    <View>
      <Text>Produkt {id} — {category}</Text>
      <Button title="Do košíku"
        onPress={() => navigation.navigate('Checkout', {
          items: [{ id, quantity: 1 }],
          total: 99.99,
        })} />
    </View>
  );
}

Pokročilé scénáře: modální okna a skupiny

Stack Navigator podporuje seskupování obrazovek a modální okna. Skupiny (Screen Group) umožňují aplikovat společná nastavení na více obrazovek bez duplikace. Modální okna jsou implementována přes stack presentation: 'modal' — obrazovka se otevírá zdola se ztmavením pozadí, jako systémový modál na iOS. Tato možnost je dostupná pouze v Native Stack.

Pro složitou navigaci může být Stack Navigator vnořen do Tab Navigator nebo Drawer Navigator. Například karta «Domů» obsahuje vlastní zásobník obrazovek a karta «Profil» — svůj. Taková kompozice navigátorů je standardním přístupem pro produkční aplikace. Každý zásobník je izolován: back stack uvnitř karty neovlivňuje ostatní karty.

typescript
// Vnořený zásobník v 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>
  );
}

// Skupiny obrazovek se společnými možnostmi
<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>

Často kladené otázky

Jaký je rozdíl mezi navigate a push ve Stack Navigator?

navigate nejprve hledá existující obrazovku s tímto názvem v zásobníku a přejde na ni, pokud je nalezena. push vždy přidá novou obrazovku na vrchol zásobníku, i když taková již existuje. push je užitečný, když potřebujete otevřít stejnou obrazovku s různými daty (např. profil uživatele).

Jak předat parametry obrazovce ve Stack Navigator?

Parametry se předávají jako druhý argument metody navigate: navigation.navigate('Profile', { userId: '123', name: 'John' }). Na přijímající obrazovce jsou parametry dostupné přes route.params. Typy parametrů jsou definovány v RootStackParamList pro automatické doplňování v TypeScript.

Stack Navigator nebo Tab Navigator — co vybrat?

Stack Navigator je vhodný pro lineární navigaci (obrazovka → podrobnosti → úpravy). Tab Navigator — pro paralelní sekce aplikace (Domů, Hledání, Profil). V produkčních projektech se kombinují: Tab Navigator obsahuje několik Stack Navigator pro každou kartu.

Jak funguje tlačítko «Zpět» ve Stack Navigator?

Ve výchozím nastavení Stack Navigator přidá tlačítko «Zpět» do nadpisu pro všechny obrazovky kromě kořenové. Na iOS také funguje gesto přejetí z levého okraje. Metoda navigation.goBack() odebere aktuální obrazovku ze zásobníku a vrátí uživatele k předchozí.

Lze animaci ve Stack Navigator zcela přizpůsobit?

V Native Stack jsou k dispozici předdefinované animace: slide_from_right, fade, none. Pro úplné přizpůsobení se používá JS Stack s cardStyleInterpolator — funkcí, která vrací styly karty v každém snímku animace. To umožňuje vytvářet libovolné přechody: škálování, paralaxa, 3D rotace.

Shrnutí

  • Stack Navigator — komponent React Navigation pro správu obrazovek na principu LIFO s nativním výkonem
  • Native Stack (createNativeStackNavigator) používá nativní animace iOS a Android a je doporučen pro 85% projektů
  • RootStackParamList zajišťuje plnou typizaci parametrů navigace v TypeScript
  • Screen options umožňují konfigurovat nadpis, animace, gesta a styl každé obrazovky
  • Skupiny a modály — vestavěné mechanismy pro organizaci souvisejících obrazovek a modálních oken
  • Kompozice navigátorů — Stack Navigator je vnořen do Tab/Drawer pro produkční architekturu
  • JS Stack dává plnou kontrolu nad animacemi přes cardStyleInterpolator pro jedinečné přechody

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také