Navegador de cajón y navegadores anidados
Configure un navegador de cajón, anide un stack dentro de una de sus pantallas y comprenda cómo interactúan los navegadores anidados con la cabecera y el botón de atrás.
Navegador de cajón y navegadores anidados es una lección gratuita de React Native Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Native Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Native Academy incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
What is a Drawer Navigator?
A drawer navigator shows a slide-out side menu (drawer) that the user can open by swiping from the left edge or tapping a hamburger icon. It is ideal for apps with many top-level sections that do not fit in a tab bar. React Navigation provides it via the @react-navigation/drawer package.
Installing the Drawer Package
The drawer navigator requires additional gesture and animation libraries. Install the drawer package and its peer dependencies. The drawer relies on react-native-gesture-handler and react-native-reanimated for smooth animations.
npm install @react-navigation/drawer
npx expo install react-native-gesture-handler react-native-reanimatedConfiguring Reanimated Babel Plugin
React Native Reanimated requires a Babel plugin to work. Add 'react-native-reanimated/plugin' as the last entry in your babel.config.js plugins array. Restart Metro bundler after making this change to clear the cache.
// babel.config.js
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: ['react-native-reanimated/plugin'],
};
};Creating a Drawer Navigator
Use createDrawerNavigator() and register screens with Drawer.Screen components. Each screen appears as a menu item in the drawer. The drawer also renders a header with a hamburger menu icon that opens the drawer when tapped.
import { createDrawerNavigator } from '@react-navigation/drawer';
const Drawer = createDrawerNavigator();
function MyDrawer() {
return (
<Drawer.Navigator initialRouteName='Home'>
<Drawer.Screen name='Home' component={HomeScreen} />
<Drawer.Screen name='Settings' component={SettingsScreen} />
<Drawer.Screen name='About' component={AboutScreen} />
</Drawer.Navigator>
);
}Opening and Closing the Drawer
From any screen inside the drawer navigator, call navigation.openDrawer() to open the side menu, navigation.closeDrawer() to close it, and navigation.toggleDrawer() to toggle between open and closed. Users can also swipe from the edge or tap the backdrop to close it.
function HomeScreen({ navigation }) {
return (
<Button
title='Open Menu'
onPress={() => navigation.openDrawer()}
/>
);
}Customizing Drawer Screen Options
Use the drawerIcon option on each Drawer.Screen to add an icon next to the menu item. Use drawerLabel to override the display name. These options follow the same pattern as tab navigator options, giving you a consistent API across navigators.
<Drawer.Screen
name='Home'
component={HomeScreen}
options={{
drawerLabel: 'Dashboard',
drawerIcon: ({ color, size }) => (
<Ionicons name='home-outline' size={size} color={color} />
),
}}
/>What Are Nested Navigators?
Nested navigators occur when you place one navigator inside a screen of another navigator. For example, a drawer navigator can contain a tab navigator, which can itself contain stack navigators inside each tab. This is how complex apps structure their navigation hierarchy.
Nesting a Stack Inside a Drawer Screen
To give each drawer section its own navigation history, use a Stack.Navigator as the component for a Drawer.Screen. The stack's header and the drawer header may conflict — set headerShown: false on the drawer to hide its header and rely on the stack header.
function HomeStack() {
return (
<Stack.Navigator>
<Stack.Screen name='Home' component={HomeScreen} />
<Stack.Screen name='Details' component={DetailsScreen} />
</Stack.Navigator>
);
}
<Drawer.Screen
name='HomeSection'
component={HomeStack}
options={{ headerShown: false }}
/>Navigation Across Nested Navigators
When navigating across nested navigators (e.g., from a screen inside a tab to a screen in another tab's stack), use the full screen name and navigator target. React Navigation resolves the correct navigator. You may also navigate to a parent navigator's screen using navigation.navigate('ParentScreen', { screen: 'ChildScreen' }).
// Navigate to a screen nested inside a different tab
navigation.navigate('ProfileTab', {
screen: 'EditProfile',
params: { userId: 5 },
});The Back Button and Nested Stacks
When a stack is nested inside a tab or drawer, the back button in the stack header only pops the stack — it does not switch tabs or close the drawer. Each navigator manages its own history independently. This is intentional and matches the expected behavior users experience in native apps.
Custom Drawer Content
Replace the default drawer menu with a fully custom component using the drawerContent prop on Drawer.Navigator. Your custom component receives navigation and state props and can display a user avatar, subscription info, or any other content above or below the menu items.
function CustomDrawer(props) {
return (
<DrawerContentScrollView {...props}>
<Image source={{ uri: user.avatar }} style={styles.avatar} />
<Text>{user.name}</Text>
<DrawerItemList {...props} />
</DrawerContentScrollView>
);
}
<Drawer.Navigator drawerContent={(props) => <CustomDrawer {...props} />}>Quick Check
Test your understanding of Drawer Navigator and nested navigators from this lesson.
Lesson Recap
In this lesson you learned: create a drawer navigator with createDrawerNavigator, open and close the drawer programmatically with navigation.openDrawer/closeDrawer, and nest navigators by using a navigator component as a screen's component prop. Next up we explore the FlatList component for efficiently rendering large data sets.
Preguntas frecuentes
¿La lección «Navegador de cajón y navegadores anidados» es gratis?
Sí — el texto completo de «Navegador de cajón y navegadores anidados» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Native Academy, actualiza a CoddyKit PRO. El curso de React Native Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Navegador de cajón y navegadores anidados»?
Configure un navegador de cajón, anide un stack dentro de una de sus pantallas y comprenda cómo interactúan los navegadores anidados con la cabecera y el botón de atrás. Practicas React Native Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar React Native Academy?
No se requiere experiencia previa. React Native Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Navegador de cajón y navegadores anidados»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de React Native Academy?
Sí. Cada lección de React Native Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Instalación y configuración de React Navigation
- Navegación entre pantallas y transmisión de parámetros
- Navegador de pestañas inferiores
- Navegador de cajón y navegadores anidados