Navigation with React Navigation
Most mobile apps have multiple screens. React Navigation is the most popular navigation library for React Native, providing stack, tab, and drawer navigators.
Navigation Types
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Navigation Patterns β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Stack Navigator (push/pop) β
β βββββββ βββββββ βββββββ β
β βScreenβββScreenβββScreenβ β
β β 1 βββ 2 βββ 3 β β
β βββββββ βββββββ βββββββ β
β β
β Tab Navigator (bottom tabs) β
β βββββββββββββββββββββββββββββββ β
β β β β
β β Content Area β β
β β β β
β ββββββ¬βββββ¬βββββ¬βββββ¬βββββββββ€ β
β βHomeβChatβAdd βNotiβ Profileβ β
β ββββββ΄βββββ΄βββββ΄βββββ΄βββββββββ β
β β
β Drawer Navigator (side menu) β
β βββββββββ¬ββββββββββββββββββββββ β
β β Menu β β β
β β Home β Content β β
β β Chat β β β
β βSettings β β
β βββββββββ΄ββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
Setting Up React Navigation
# Install dependencies
npm install @react-navigation/native @react-navigation/stack
npm install react-native-screens react-native-safe-area-context
Example: Stack Navigator
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { View, Text, Button } from 'react-native';
const Stack = createStackNavigator();
const HomeScreen = ({ navigation }) => (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text style={{ fontSize: 24 }}>Home Screen</Text>
<Button
title="Go to Details"
onPress={() => navigation.navigate('Details')}
/>
</View>
);
const DetailsScreen = ({ navigation }) => (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text style={{ fontSize: 24 }}>Details Screen</Text>
<Button
title="Go Back"
onPress={() => navigation.goBack()}
/>
</View>
);
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
};
export default App;