Drawer
Edit this page
Learn how to use the Drawer layout in Expo Router.
To use drawer navigator you'll need to install some extra dependencies.
Installation
-
npx expo install @react-navigation/drawer react-native-gesture-handler react-native-reanimated
No additional configuration is required. Reanimated Babel plugin is automatically configured in babel-preset-expo
when you install the library.
Usage
Now you can use the Drawer
layout to create a drawer navigator. You'll need to wrap the <Drawer />
in a <GestureHandlerRootView>
to enable gestures. You only need one <GestureHandlerRootView>
in your component tree. Any nested routes are not required to be wrapped individually.
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { Drawer } from 'expo-router/drawer';
export default function Layout() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<Drawer />
</GestureHandlerRootView>
);
}
To edit the drawer navigation menu labels, titles and screen options specific screens are required as follows:
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { Drawer } from 'expo-router/drawer';
export default function Layout() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<Drawer>
<Drawer.Screen
name="index" // This is the name of the page and must match the url from root
options={{
drawerLabel: 'Home',
title: 'overview',
}}
/>
<Drawer.Screen
name="user/[id]" // This is the name of the page and must match the url from root
options={{
drawerLabel: 'User',
title: 'overview',
}}
/>
</Drawer>
</GestureHandlerRootView>
);
}
Note: Be careful when using
react-native-gesture-handler
on the web. It can increase the JavaScript bundle size significantly. Learn more about using platform-specific modules.