A Drawer Navigator lets users open a side menu to switch between screens easily. It helps organize app sections in one place.
Drawer Navigator in React Native
import { createDrawerNavigator } from '@react-navigation/drawer'; import { NavigationContainer } from '@react-navigation/native'; const Drawer = createDrawerNavigator(); function MyDrawer() { return ( <NavigationContainer> <Drawer.Navigator> <Drawer.Screen name="Home" component={HomeScreen} /> <Drawer.Screen name="Profile" component={ProfileScreen} /> </Drawer.Navigator> </NavigationContainer> ); }
Wrap your drawer navigator inside NavigationContainer to manage navigation state.
Each Drawer.Screen defines a screen accessible from the drawer menu.
import { createDrawerNavigator } from '@react-navigation/drawer'; const Drawer = createDrawerNavigator(); function MyDrawer() { return ( <Drawer.Navigator> <Drawer.Screen name="Home" component={HomeScreen} /> <Drawer.Screen name="Settings" component={SettingsScreen} /> </Drawer.Navigator> ); }
initialRouteName.function MyDrawer() {
return (
<Drawer.Navigator initialRouteName="Profile">
<Drawer.Screen name="Home" component={HomeScreen} />
<Drawer.Screen name="Profile" component={ProfileScreen} />
</Drawer.Navigator>
);
}drawerPosition.function MyDrawer() {
return (
<Drawer.Navigator screenOptions={{ drawerPosition: 'right' }}>
<Drawer.Screen name="Home" component={HomeScreen} />
<Drawer.Screen name="Profile" component={ProfileScreen} />
</Drawer.Navigator>
);
}This app has a drawer menu with two screens: Home and Profile. On the Home screen, a button opens the drawer menu.
import React from 'react'; import { View, Text, Button } from 'react-native'; import { NavigationContainer } from '@react-navigation/native'; import { createDrawerNavigator } from '@react-navigation/drawer'; function HomeScreen({ navigation }) { return ( <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> <Text>Home Screen</Text> <Button title="Open Drawer" onPress={() => navigation.openDrawer()} /> </View> ); } function ProfileScreen() { return ( <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> <Text>Profile Screen</Text> </View> ); } const Drawer = createDrawerNavigator(); export default function App() { return ( <NavigationContainer> <Drawer.Navigator> <Drawer.Screen name="Home" component={HomeScreen} /> <Drawer.Screen name="Profile" component={ProfileScreen} /> </Drawer.Navigator> </NavigationContainer> ); }
You must install @react-navigation/native and @react-navigation/drawer packages to use Drawer Navigator.
Drawer navigation works best for apps with 3-5 main screens to avoid clutter.
Remember to wrap your navigator in NavigationContainer once at the root of your app.
Drawer Navigator creates a side menu for easy screen switching.
Use Drawer.Screen to add screens to the drawer.
Wrap the drawer navigator inside NavigationContainer to manage navigation state.
Practice
Drawer Navigator in React Native?Solution
Step 1: Understand Drawer Navigator role
A Drawer Navigator provides a side menu that lets users switch screens easily.Step 2: Compare with other options
The other options relate to API requests, styling components, and global state management, not navigation menus.Final Answer:
To create a side menu for switching between screens easily -> Option AQuick Check:
Drawer Navigator = Side menu navigation [OK]
- Confusing Drawer Navigator with state management
- Thinking it styles components
- Mixing it up with API handling
Solution
Step 1: Check required props for Drawer.Screen
Drawer.Screen needs a 'name' and a 'component' prop to work correctly.Step 2: Validate each option
<Drawer.Screen name="Home" component={HomeScreen} /> correctly uses both 'name' and 'component'. The other options miss one or both props.Final Answer:
<Drawer.Screen name="Home" component={HomeScreen} /> -> Option CQuick Check:
Drawer.Screen requires name and component [OK]
- Omitting the 'name' prop
- Omitting the 'component' prop
- Using incorrect JSX syntax
import { NavigationContainer } from '@react-navigation/native';
import { createDrawerNavigator } from '@react-navigation/drawer';
import HomeScreen from './HomeScreen';
import ProfileScreen from './ProfileScreen';
const Drawer = createDrawerNavigator();
export default function App() {
return (
);
}Solution
Step 1: Check NavigationContainer usage
The code wraps Drawer.Navigator inside NavigationContainer, which manages navigation state properly.Step 2: Verify Drawer.Screen setup
Two screens, Home and Profile, are added correctly to the drawer.Final Answer:
The app shows a side menu with Home and Profile screens to switch between -> Option BQuick Check:
NavigationContainer + Drawer.Screen = working drawer menu [OK]
- Forgetting NavigationContainer causes errors
- Adding screens outside Drawer.Navigator
- Not providing component prop to Drawer.Screen
const Drawer = createDrawerNavigator();
export default function App() {
return (
);
}Solution
Step 1: Check for NavigationContainer presence
The code does not wrap Drawer.Navigator inside NavigationContainer, which is required to manage navigation state.Step 2: Verify other props and imports
Drawer.Screen components have 'name' and 'component' props, so no issue there. The question does not show imports, but the main error is missing NavigationContainer.Final Answer:
Missing NavigationContainer wrapping the Drawer.Navigator -> Option DQuick Check:
NavigationContainer is required to wrap navigators [OK]
- Forgetting NavigationContainer causes navigation errors
- Assuming Drawer.Navigator works alone
- Ignoring import statements (not shown here)
Solution
Step 1: Understand drawer customization options
ThedrawerContentprop lets you replace the default drawer menu with a custom component where you can add headers and buttons.Step 2: Evaluate other options
Add aDrawer.Screennamed 'Logout' with a button component adds a screen, not a menu button. Wrap each screen component with a header and logout button manually duplicates UI in each screen, not efficient. UsescreenOptionsto add header and logout button globally controls screen headers, not drawer content.Final Answer:
Use the drawerContent prop on Drawer.Navigator to provide a custom component with header and logout button -> Option AQuick Check:
drawerContent prop customizes drawer UI [OK]
- Adding logout as a screen instead of drawer content
- Trying to add buttons via screenOptions
- Manually adding UI inside each screen
Ready to prove it?
Pass the test and this pattern moves unknown
