Nested navigators help organize app screens by grouping related pages inside smaller navigation flows. This keeps your app easy to manage and use.
Nested navigators in React Native
import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; const Stack = createStackNavigator(); const Tab = createBottomTabNavigator(); function HomeStack() { return ( <Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Details" component={DetailsScreen} /> </Stack.Navigator> ); } function App() { return ( <NavigationContainer> <Tab.Navigator> <Tab.Screen name="HomeStack" component={HomeStack} /> <Tab.Screen name="Settings" component={SettingsScreen} /> </Tab.Navigator> </NavigationContainer> ); }
Each navigator is a React component that manages its own screens.
You can nest navigators by using one navigator as a screen inside another.
function ProfileStack() {
return (
<Stack.Navigator>
<Stack.Screen name="Profile" component={ProfileScreen} />
<Stack.Screen name="EditProfile" component={EditProfileScreen} />
</Stack.Navigator>
);
}<Tab.Navigator> <Tab.Screen name="HomeStack" component={HomeStack} /> <Tab.Screen name="ProfileStack" component={ProfileStack} /> </Tab.Navigator>
This app has a bottom tab navigator with two tabs: Home and Settings. The Home tab contains a stack navigator with Home and Details screens. You can tap the button on Home to go to Details.
import React from 'react'; import { Text, View, Button } from 'react-native'; import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; 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() { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>Details Screen</Text> </View> ); } function SettingsScreen() { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>Settings Screen</Text> </View> ); } const Stack = createStackNavigator(); const Tab = createBottomTabNavigator(); function HomeStack() { return ( <Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Details" component={DetailsScreen} /> </Stack.Navigator> ); } export default function App() { return ( <NavigationContainer> <Tab.Navigator> <Tab.Screen name="HomeStack" component={HomeStack} options={{ title: 'Home' }} /> <Tab.Screen name="Settings" component={SettingsScreen} /> </Tab.Navigator> </NavigationContainer> ); }
Remember to wrap your app in NavigationContainer once at the root.
Each nested navigator manages its own navigation history.
Use clear names for nested navigators to avoid confusion.
Nested navigators help organize complex apps by grouping screens.
You can put one navigator inside another as a screen component.
This makes navigation easier to manage and user-friendly.
Practice
nested navigators in a React Native app?Solution
Step 1: Understand navigator roles
Nested navigators group related screens inside one navigator to keep navigation organized.Step 2: Identify main benefit
This grouping makes managing navigation easier and improves user experience.Final Answer:
To organize screens into groups for easier navigation management -> Option CQuick Check:
Nested navigators = organize screens [OK]
- Confusing nested navigators with performance optimization
- Thinking nested navigators reduce app size
- Assuming nested navigators disable gestures
Solution
Step 1: Understand navigator nesting
To nest navigators, you add the nested navigator as a screen inside the parent navigator.Step 2: Check other options
The other options do not properly register the nested navigator for navigation.Final Answer:
Use the nested navigator as a screen component inside the parent navigator -> Option BQuick Check:
Nested navigator = screen in parent [OK]
- Importing nested navigator but forgetting to add as screen
- Trying to call navigator inside hooks
- Wrapping navigator in View without registering
'Profile' from the root navigator?
const RootStack = createStackNavigator();
const HomeStack = createStackNavigator();
function HomeStackScreen() {
return (
<HomeStack.Navigator>
<HomeStack.Screen name="Feed" component={FeedScreen} />
<HomeStack.Screen name="Profile" component={ProfileScreen} />
</HomeStack.Navigator>
);
}
function App() {
return (
<NavigationContainer>
<RootStack.Navigator>
<RootStack.Screen name="Home" component={HomeStackScreen} />
<RootStack.Screen name="Settings" component={SettingsScreen} />
</RootStack.Navigator>
</NavigationContainer>
);
}Solution
Step 1: Identify where 'Profile' screen is defined
'Profile' is a screen inside the HomeStack nested navigator, not directly in RootStack.Step 2: Understand navigation to nested screens
To navigate to 'Profile', you navigate through 'Home' stack, which contains 'Profile'. So 'ProfileScreen' will show.Final Answer:
The ProfileScreen inside the HomeStack navigator -> Option AQuick Check:
Nested screen 'Profile' = HomeStack.ProfileScreen [OK]
- Assuming nested screens are direct children of root navigator
- Confusing SettingsScreen with ProfileScreen
- Expecting error when navigating nested screens
const RootStack = createStackNavigator();
const Tab = createBottomTabNavigator();
function TabNavigator() {
return (
<Tab.Navigator>
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Profile" component={ProfileScreen} />
</Tab.Navigator>
);
}
function App() {
return (
<NavigationContainer>
<RootStack.Navigator>
<RootStack.Screen name="Tabs" component={TabNavigator} />
<RootStack.Screen name="Settings" component={SettingsScreen} />
</RootStack.Navigator>
</NavigationContainer>
);
}
// Navigation call:
navigation.navigate('Profile');Solution
Step 1: Analyze navigation call
Calling navigation.navigate('Profile') tries to navigate directly in RootStack, but 'Profile' is inside TabNavigator nested navigator.Step 2: Understand nested navigation rules
You must navigate to 'Tabs' first, then inside TabNavigator navigate to 'Profile'. Direct navigation to nested screens by name won't work.Final Answer:
Cannot navigate directly to 'Profile' because it's inside the nested TabNavigator -> Option DQuick Check:
Nested screen navigation requires parent route [OK]
- Trying to navigate nested screen directly by name
- Placing TabNavigator inside unrelated screen
- Forgetting NavigationContainer
Solution
Step 1: Understand nesting structure
The drawer navigator is the root, so the stack navigator must be a screen inside the drawer to nest properly.Step 2: Evaluate options
Add the stack navigator as a screen component inside the drawer navigator's screens correctly nests stack inside drawer by adding it as a screen. The other options break navigation rules or cause errors.Final Answer:
Add the stack navigator as a screen component inside the drawer navigator's screens -> Option AQuick Check:
Nested navigator = screen inside parent navigator [OK]
- Wrapping drawer inside stack instead of nesting stack inside drawer
- Using multiple NavigationContainers
- Placing navigators outside NavigationContainer
Ready to prove it?
Pass the test and this pattern moves unknown
