Stack Navigator: vad är det, stacknavigering i React Native

Författare: IT Sectr Publicerad: 2026-02-22 Lästid: 11 min

Stack Navigator — komponent i React Navigation-biblioteket för att hantera skärmar i mobilapplikationer enligt stackprincipen (LIFO). Varje ny skärm placeras ovanpå den föregående och «Tillbaka»-knappen tar bort den översta skärmen och återför användaren till den föregående. Läs mer om navigeringsarkitektur i officiella React Navigation-dokumentationen.

Huvudpunkter

  • Stack Navigator — React Navigation-komponent för att hantera skärmar enligt stackprincipen (LIFO)
  • Stacknavigering — varje skärm placeras ovanpå den föregående; «Tillbaka» tar bort den aktuella skärmen
  • Native Stack — inbyggd implementering via UINavigationController (iOS) och Fragment (Android)
  • Animeringar — inbyggda övergångar (slide, fade, none) och anpassade animeringar via cardStyleInterpolator
  • TypeScript — fullständig typning av navigeringsparametrar via RootStackParamList

Vad är Stack Navigator?

Stack Navigator — en av de grundläggande navigatorerna i React Navigation-biblioteket som implementerar stackmodellen för skärmar. Det ger navigering som är bekant för mobilanvändare: att öppna en ny skärm åtföljs av en animering från höger och «Tillbaka»-knappen eller svepgest återför användaren till föregående skärm. Stack Navigator stöds på iOS och Android och använder plattformens inbyggda komponenter för maximal prestanda.

React Navigation är det populäraste navigeringsbiblioteket för React Native, installerat i 85% av projekten (enligt npm-data, 2026). Stack Navigator ingår i dess kärna och finns i två implementeringar: createNativeStackNavigator (inbyggd, rekommenderad) och createStackNavigator (JavaScript, för komplexa anpassade animeringar). Den inbyggda versionen dök upp i React Navigation v5 och blev standard i v6+.

Den främsta fördelen med Stack Navigator — naturligt beteende som är bekant för iOS- och Android-användare. På iOS representeras stacken visuellt som UINavigationController, på Android som FragmentManager med slide-animering. Utvecklaren behöver inte implementera stacklogiken manuellt — navigatorn hanterar skärmtillstånd, back stack och animeringar automatiskt.

Hur stacknavigering fungerar

Stacknavigering är baserad på LIFO-principen (Last In, First Out). När användaren öppnar en ny skärm placerar navigatorn den överst i stacken. Vid tryck på «Tillbaka» tas den översta skärmen bort och användaren ser den föregående. Stacken kan innehålla valfritt antal skärmar — begränsningen är endast enhetens minne.

Varje skärm i stacken behåller sitt tillstånd. Vid återgång till föregående skärm återställs dess tillstånd automatiskt. Detta skiljer stacken från andra navigeringstyper (Tab, Drawer), där skärmar kan återskapas. React Navigation hanterar tillståndet via sin egen navigeringskontextmekanism.

ÅtgärdResultatExempel
navigatePlacerar skärmen överst i stackennavigation.navigate('Profile')
goBackTar bort den översta skärmen från stackennavigation.goBack()
pushTvingar tillägg av en ny skärmnavigation.push('Profile')
popToTopÅtergår till rot-skärmennavigation.popToTop()
resetErsätter hela stacken med en ny uppsättningnavigation.reset({ index: 0, routes: [...] })

Svepgest för återgång

På iOS stöder Stack Navigator svepgest från vänsterkanten av skärmen för att gå tillbaka — detta är standardbeteendet på iOS som användare förväntar sig. På Android är gesten inaktiverad som standard, men kan aktiveras via alternativet gestureEnabled. I Native Stack fungerar gesten inbyggt, utan fördröjningar i JavaScript-tråden.

Native Stack vs JS Stack

React Navigation erbjuder två typer av Stack Navigator: Native Stack (createNativeStackNavigator) och JS Stack (createStackNavigator). Huvudskillnaden är var animeringen utförs. Native Stack använder inbyggda animeringsdrivrutiner för iOS och Android, medan JS Stack fungerar via React Navigations JavaScript-tråd. Valet mellan dem beror på prestanda- och anpassningskrav.

Native Stack rekommenderas för de flesta projekt. Det ger jämna 60 FPS-animeringar utan att blockera JS-tråden, stöder systemets svepgest på iOS och använder inbyggda övergångar — slide på iOS, fade på Android. Native Stack är dock begränsad i anpassning av animeringar: endast en fördefinierad uppsättning övergångar är tillgänglig.

JS Stack ger fullständig kontroll över animeringar via cardStyleInterpolator. Utvecklaren kan skapa vilken animering som helst: skalning, rotation, parallax, anpassade kurvor. Nackdel — animeringarna körs i JS-tråden, vilket kan orsaka bildtapp på svagare enheter vid komplexa övergångar. För 70% av projekten är Native Stack mer än tillräckligt.

typescript
// Native Stack — rekommenderad implementering
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>
  );
}

Installation och konfiguration av Stack Navigator

För att komma igång med Stack Navigator måste React Navigation och dess beroenden installeras. Den minimala uppsättningen inkluderar @react-navigation/native, @react-navigation/native-stack och react-native-screens. Efter installation slås appen in i NavigationContainer — en kontext som tillhandahåller navigeringstillstånd till alla underordnade komponenter.

bash
# Installation av React Navigation-beroenden
npm install @react-navigation/native @react-navigation/native-stack
npm install react-native-screens react-native-safe-area-context

# För iOS — installation av pod
cd ios && pod install && cd ..

Efter installation skapas Stack.Navigator med definierade skärmar i RootStackParamList. Varje skärm kopplas till en React-komponent via prop component. Navigatom kan vara rot eller kapslad i en annan navigator (Tab, Drawer). För konfiguration används screenOptions — gemensamma för alla skärmar eller individuella för varje.

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

Parametrar och anpassning av Stack Navigator

Stack Navigator erbjuder många alternativ för att anpassa utseende och beteende. Huvudparametrarna ställs in via screenOptions på Navigator-nivå eller options på Screen-nivå. Utvecklaren kan konfigurera titel, övergångsanimering, svepgest, kortstil och bakgrundsmörkning. Flexibiliteten i inställningarna gör det möjligt att anpassa navigeringen till applikationens designsystem.

AlternativTypBeskrivning
headerShownbooleanVisa eller dölj skärmtitel
headerStyleobjectStil för titelpanel (backgroundColor, elevation)
headerBackTitlestringText för «Tillbaka»-knapp (iOS)
gestureEnabledbooleanAktivera svepgest för återgång
animationstringAnimeringstyp: slide_from_right, fade, none
contentStyleobjectStil för skärmens inre område

Anpassade animeringar via cardStyleInterpolator

För JS Stack tillåter cardStyleInterpolator att skapa godtyckliga övergångsanimeringar mellan skärmar. Detta är ett kraftfullt verktyg för att implementera unika visuella effekter: skalning, rotation, parallax, horisontell flip. Funktionen tar emot aktuella animeringsframstegsvärden (current, next) och returnerar stilar för de animerade elementen.

Typning av navigering med TypeScript

Stack Navigator stöder fullständig typning via TypeScript. För detta definieras RootStackParamList — ett typ-objekt där nycklarna är skärmnamn och värdena är parametertyper. Efter typning får navigation.navigate och route.params autokomplettering och typkontroll. Detta eliminerar parameteröverföringsfel i kompileringsfasen.

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

// Typad skärm
type ProductScreenProps = NativeStackScreenProps<RootStackParamList, 'Product'>;

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

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

Avancerade scenarier: modala fönster och grupper

Stack Navigator stöder gruppering av skärmar och modala fönster. Grupper (Screen Group) gör det möjligt att tillämpa gemensamma inställningar på flera skärmar utan dubbelarbete. Modala fönster implementeras via stack presentation: 'modal' — skärmen öppnas nedifrån med mörkare bakgrund, som en systemmodal på iOS. Detta alternativ är endast tillgängligt i Native Stack.

För komplex navigering kan Stack Navigator kapslas i Tab Navigator eller Drawer Navigator. Till exempel innehåller fliken «Hem» sin egen skärmstack och fliken «Profil» sin egen. En sådan sammansättning av navigatorer är standardmetoden för produktionsapplikationer. Varje stack är isolerad: back stack inom en flik påverkar inte andra flikar.

typescript
// Kapslad stack i 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>
  );
}

// Skärmgrupper med gemensamma alternativ
<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>

Vanliga frågor

Vad är skillnaden mellan navigate och push i Stack Navigator?

navigate söker först efter en befintlig skärm med det namnet i stacken och navigerar till den om den hittas. push lägger alltid till en ny skärm överst i stacken, även om en sådan redan finns. push är användbart när du behöver öppna samma skärm med olika data (t.ex. användarprofil).

Hur skickar jag parametrar till en skärm i Stack Navigator?

Parametrar skickas som andra argument till metoden navigate: navigation.navigate('Profile', { userId: '123', name: 'John' }). På mottagande skärm är parametrarna tillgängliga via route.params. Parametertyper definieras i RootStackParamList för autokomplettering i TypeScript.

Stack Navigator eller Tab Navigator — vad ska man välja?

Stack Navigator passar för linjär navigering (skärm → detaljer → redigera). Tab Navigator — för parallella sektioner av appen (Hem, Sök, Profil). I produktionsprojekt kombineras de: Tab Navigator innehåller flera Stack Navigators för varje flik.

Hur fungerar «Tillbaka»-knappen i Stack Navigator?

Som standard lägger Stack Navigator till en «Tillbaka»-knapp i titeln för alla skärmar utom rot-skärmen. På iOS fungerar även svepgesten från vänsterkanten. Metoden navigation.goBack() tar bort den aktuella skärmen från stacken och återför användaren till den föregående.

Kan animeringen i Stack Navigator helt anpassas?

I Native Stack finns fördefinierade animeringar tillgängliga: slide_from_right, fade, none. För fullständig anpassning används JS Stack med cardStyleInterpolator — en funktion som returnerar kortstilar vid varje bildruta i animeringen. Detta gör det möjligt att skapa vilka övergångar som helst: skalning, parallax, 3D-rotation.

Sammanfattning

  • Stack Navigator — React Navigation-komponent för att hantera skärmar enligt LIFO-principen med inbyggd prestanda
  • Native Stack (createNativeStackNavigator) använder inbyggda iOS- och Android-animeringar och rekommenderas för 85% av projekten
  • RootStackParamList ger fullständig typning av navigeringsparametrar i TypeScript
  • Screen options gör det möjligt att konfigurera titel, animeringar, gester och stil för varje skärm
  • Grupper och modal — inbyggda mekanismer för att organisera relaterade skärmar och modala fönster
  • Sammansättning av navigatorer — Stack Navigator kapslas i Tab/Drawer för produktionsarkitektur
  • JS Stack ger fullständig kontroll över animeringar via cardStyleInterpolator för unika övergångar

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också