Navigation is one of the most critical parts of any mobile application, as it defines how users move between different screens and features. In React Native navigation is handled with the React Navigation library, which is the most widely used solution for adding navigation to your app.
Page Contents
This article will cover the basics of React Native Navigation using React Navigation, exploring different types of navigation like stack navigation, tab navigation, and drawer navigation. By the end of this guide, you’ll be able to implement seamless transitions between screens and organize your app’s navigation structure effectively.
Installing React Navigation
To get started with React Navigation, you first need to install the required packages. Run the following commands to set it up:
npm install @react-navigation/native
npm install react-native-screens react-native-safe-area-context
Next, install the navigation dependencies:
npm install @react-navigation/stack
After the installation, wrap your app’s root component in a NavigationContainer, which manages the navigation state and links the app to the navigation system.
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
};
export default App;
In this example, we’re using stack navigation to move between two screens: HomeScreen and DetailsScreen.
Stack Navigation
Stack navigation is one of the most common navigation patterns, where screens are placed in a stack and the user can navigate forward and backward through the stack.
Here’s an example of how to implement stack navigation:
import React from 'react';
import { Button, Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
const HomeScreen = ({ navigation }) => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Home Screen</Text>
<Button
title="Go to Details"
onPress={() => navigation.navigate('Details')}
/>
</View>
);
};
const DetailsScreen = () => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Details Screen</Text>
</View>
);
};
const Stack = createStackNavigator();
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
};
export default App;
In this example:
- The
HomeScreencontains a button that navigates to theDetailsScreenwhen clicked. - The
Stack.Navigatormanages the transitions between these screens.
Tab Navigation
Tab navigation allows you to switch between different sections of your app using tabs at the bottom of the screen.
First, install the tab navigation dependencies:
npm install @react-navigation/bottom-tabs
Then, implement tab navigation:
import React from 'react';
import { Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
const HomeScreen = () => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Home Screen</Text>
</View>
);
};
const SettingsScreen = () => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Settings Screen</Text>
</View>
);
};
const Tab = createBottomTabNavigator();
const App = () => {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
</NavigationContainer>
);
};
export default App;
In this example:
- The
Tab.Navigatoris used to define tab-based navigation. - The user can switch between
HomeScreenandSettingsScreenusing the tabs at the bottom.
Drawer Navigation
Drawer navigation allows you to create a side menu (or drawer) that can slide out from the side of the screen.
First, install the drawer navigation dependencies:
npm install @react-navigation/drawer
Here’s an example of how to use drawer navigation:
import React from 'react';
import { Text, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createDrawerNavigator } from '@react-navigation/drawer';
const HomeScreen = () => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Home Screen</Text>
</View>
);
};
const SettingsScreen = () => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Settings Screen</Text>
</View>
);
};
const Drawer = createDrawerNavigator();
const App = () => {
return (
<NavigationContainer>
<Drawer.Navigator>
<Drawer.Screen name="Home" component={HomeScreen} />
<Drawer.Screen name="Settings" component={SettingsScreen} />
</Drawer.Navigator>
</NavigationContainer>
);
};
export default App;
In this example:
- The
Drawer.Navigatormanages the drawer, and screens likeHomeScreenandSettingsScreenare displayed when selected from the drawer menu.
Passing Parameters Between Screens
React Navigation allows you to pass parameters between screens easily. Here’s how you can pass and access parameters:
// HomeScreen.js
<Button
title="Go to Details"
onPress={() => navigation.navigate('Details', { itemId: 42 })}
/>
// DetailsScreen.js
const DetailsScreen = ({ route }) => {
const { itemId } = route.params;
return (
<View>
<Text>Item ID: {itemId}</Text>
</View>
);
};
In this example:
- The
navigation.navigate()function passes theitemIdto theDetailsScreen. - The
route.paramsobject is used to access the passed parameters in theDetailsScreen.
Handling Navigation Options
React Navigation provides several options for customizing the header and screen transitions. For example, you can set the title of the screen or add a back button using navigationOptions.
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ title: 'My Home' }}
/>
You can also customize the header style:
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
title: 'Home',
headerStyle: { backgroundColor: '#4caf50' },
headerTintColor: '#fff',
}}
/>
Conclusion
In this React Native Navigation guide, we explored how to handle navigation using React Navigation. From stack navigation to tab and drawer navigation, React Navigation makes it easy to manage transitions and screen navigation in your mobile apps. By following best practices, such as passing parameters between screens and customizing navigation options, you can ensure a seamless user experience.

Parvesh Sandila is a passionate web and Mobile app developer from Jalandhar, Punjab, who has over six years of experience. Holding a Master’s degree in Computer Applications (2017), he has also mentored over 100 students in coding. In 2019, Parvesh founded Owlbuddy.com, a platform that provides free, high-quality programming tutorials in languages like Java, Python, Kotlin, PHP, and Android. His mission is to make tech education accessible to all aspiring developers.​
