Bird
Raised Fist0
React Nativemobile~5 mins

Stack Navigator in React Native

Choose your learning style10 modes available
Introduction

A Stack Navigator helps you move between screens in an app, like pages in a book. It keeps track of where you are and lets you go back easily.

When you want to open a new screen on top of the current one, like opening a details page.
When you want users to go back to the previous screen with a back button.
When your app has a flow of screens, like login, then home, then profile.
When you want to keep a history of screens visited to navigate back.
When you want simple screen transitions with default animations.
Syntax
React Native
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { NavigationContainer } from '@react-navigation/native';

const Stack = createNativeStackNavigator();

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

Use NavigationContainer to wrap your navigator. It manages navigation state.

Each Stack.Screen defines a screen with a name and a component to show.

Examples
Example with only one screen. No navigation possible yet.
React Native
const Stack = createNativeStackNavigator();

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen name="Home" component={HomeScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}
Set initial screen to "Details" instead of "Home".
React Native
const Stack = createNativeStackNavigator();

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Details">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}
Navigate from Home screen to Details screen when button is pressed.
React Native
function HomeScreen({ navigation }) {
  return (
    <Button
      title="Go to Details"
      onPress={() => navigation.navigate('Details')}
    />
  );
}
Sample App

This app has two screens: Home and Details. From Home, you can go to Details. From Details, you can go back to Home.

React Native
import React from 'react';
import { Button, Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';

function HomeScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Home Screen</Text>
      <Button
        title="Go to Details"
        onPress={() => navigation.navigate('Details')}
      />
    </View>
  );
}

function DetailsScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Details Screen</Text>
      <Button
        title="Go back"
        onPress={() => navigation.goBack()}
      />
    </View>
  );
}

const Stack = createNativeStackNavigator();

export default function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}
OutputSuccess
Important Notes

The stack navigator keeps screens in a stack, so you can go forward and back easily.

Navigation actions like navigate and goBack control screen changes.

Stack navigation animations and header bars are handled automatically.

Summary

Stack Navigator manages screen navigation like a stack of pages.

Use it to move forward to new screens and back to previous ones.

Wrap your navigator in NavigationContainer and define screens inside Stack.Navigator.

Practice

(1/5)
1. What is the main purpose of a Stack Navigator in React Native?
easy
A. To fetch data from an API
B. To style components with CSS
C. To manage screen navigation like a stack of pages
D. To handle user input events

Solution

  1. Step 1: Understand navigation concepts

    Stack Navigator organizes screens so you can move forward and back like a stack of pages.
  2. Step 2: Identify the correct purpose

    It is not for styling, fetching data, or handling input but for navigation.
  3. Final Answer:

    To manage screen navigation like a stack of pages -> Option C
  4. Quick Check:

    Stack Navigator = navigation management [OK]
Hint: Stack Navigator stacks screens for forward/back navigation [OK]
Common Mistakes:
  • Confusing navigation with styling
  • Thinking it handles data fetching
  • Assuming it manages user input
2. Which of the following is the correct way to wrap your app with a stack navigator?
easy
A.
B.
C.
D.

Solution

  1. Step 1: Recognize correct nesting

    The NavigationContainer must wrap the entire navigator, which contains Stack.Navigator and its screens.
  2. Step 2: Check each option's structure

    Only <NavigationContainer><Stack.Navigator><Stack.Screen name="Home" component={HomeScreen} /></Stack.Navigator></NavigationContainer> correctly wraps Stack.Navigator inside NavigationContainer and includes Stack.Screen.
  3. Final Answer:

    <NavigationContainer><Stack.Navigator><Stack.Screen name="Home" component={HomeScreen} /></Stack.Navigator></NavigationContainer> -> Option A
  4. Quick Check:

    NavigationContainer wraps Stack.Navigator [OK]
Hint: NavigationContainer wraps Stack.Navigator, which holds screens [OK]
Common Mistakes:
  • Placing Stack.Screen outside Stack.Navigator
  • Wrapping Stack.Screen directly in NavigationContainer
  • Incorrect nesting order of components
3. Given this code snippet, what screen will be shown first when the app runs?
const Stack = createStackNavigator();

function App() {
  return (
    
      
        
        
      
    
  );
}
medium
A. Profile screen
B. Error: No initial screen defined
C. Home screen
D. Settings screen

Solution

  1. Step 1: Identify default initial screen

    By default, the first Stack.Screen listed is the initial screen shown.
  2. Step 2: Check the order of screens

    The first screen is named "Profile", so the app shows ProfileScreen first.
  3. Final Answer:

    Profile screen -> Option A
  4. Quick Check:

    First Stack.Screen = initial screen [OK]
Hint: First Stack.Screen listed is the initial screen [OK]
Common Mistakes:
  • Assuming Settings is first because of alphabetical order
  • Thinking Home screen appears without definition
  • Believing an error occurs without initial screen prop
4. What is wrong with this code snippet?
const Stack = createStackNavigator();

function App() {
  return (
    
      
    
  );
}
medium
A. Stack.Screen name must be lowercase
B. Missing NavigationContainer wrapping the navigator
C. HomeScreen component must be imported from react-native
D. Stack.Navigator cannot have only one screen

Solution

  1. Step 1: Check for NavigationContainer

    React Navigation requires NavigationContainer to wrap the navigator for proper navigation context.
  2. Step 2: Verify other parts

    Screen names can be uppercase, components can be custom, and one screen is allowed.
  3. Final Answer:

    Missing NavigationContainer wrapping the navigator -> Option B
  4. Quick Check:

    NavigationContainer is required [OK]
Hint: Always wrap Stack.Navigator inside NavigationContainer [OK]
Common Mistakes:
  • Omitting NavigationContainer causes navigation failure
  • Thinking screen names must be lowercase
  • Assuming only built-in components can be screens
5. You want to navigate from the Home screen to the Details screen using a Stack Navigator. Which code snippet correctly performs this navigation inside a button press handler?
function HomeScreen({ navigation }) {
  return (
     ???}
    />
  );
}
hard
A. navigation.push(Details)
B. navigation.popToTop('Details')
C. navigation.goBack('Details')
D. navigation.navigate('Details')

Solution

  1. Step 1: Understand navigation methods

    navigation.navigate('ScreenName') moves to a screen, pushing it on the stack if needed.
  2. Step 2: Compare options

    push(Details) has a syntax error (missing quotes around screen name); goBack and popToTop are for going back, not forward.
  3. Final Answer:

    navigation.navigate('Details') -> Option D
  4. Quick Check:

    Use navigate() to go forward to a screen [OK]
Hint: Use navigation.navigate('ScreenName') to move forward [OK]
Common Mistakes:
  • Using goBack to go forward
  • Using popToTop incorrectly
  • Confusing push and navigate methods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard