En este tutorial aprenderás cómo configurar un Stack.Navigator dentro de un Tab.Navigator. Esto es útil cuando necesitas que ciertas pantallas estén agrupadas bajo una pestaña específica (por ejemplo, una pantalla de perfil con opciones adicionales).

Aprenderás cómo configurar una navegación mixta utilizando un Stack.Navigator dentro de un Tab.Navigator y viceversa, simulando una estructura como la siguiente:
Pantallas principales:
Inicio(Tab Navigation)Buscar(Tab Navigation)Perfil(Tab Navigation con navegación interna a través de Stack)
Subpantallas del perfil:
LoginConfiguraciones
Paso 1: Instalar Dependencias
Asegúrate de tener instaladas las dependencias necesarias para React Navigation:
npm install @react-navigation/native @react-navigation/stack @react-navigation/bottom-tabs react-native-screens react-native-safe-area-context react-native-gesture-handler react-native-reanimated react-native-vector-icons
Si usas expo, ejecuta:
expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context react-native-vector-icons react-native-get-random-values
Paso 2: Configurar Stack y Tab Navigators
Crear el Stack Navigator para el Perfil
El Stack.Navigator manejará la navegación interna dentro de la sección Perfil:
import React from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import LoginScreen from './screens/LoginScreen';
import ConfigScreen from './screens/ConfigScreen';
const Stack = createStackNavigator();
export default function PerfilStackNavigator() {
return (
<Stack.Navigator initialRouteName="Login">
<Stack.Screen name="Login" component={LoginScreen} options={{ headerShown: false }} />
<Stack.Screen name="Configuraciones" component={ConfigScreen} options={{ headerTitle: 'Configuraciones' }} />
</Stack.Navigator>
);
}
Crear el Tab Navigator Principal
El Tab.Navigator será el contenedor principal de las pestañas de navegación.
import React from 'react';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import HomeScreen from './screens/HomeScreen';
import SearchScreen from './screens/SearchScreen';
import PerfilStackNavigator from './PerfilStackNavigator';
import { FontAwesome, AntDesign } from '@expo/vector-icons';
const Tab = createBottomTabNavigator();
export default function MainTabNavigator() {
return (
<Tab.Navigator
initialRouteName="Inicio"
screenOptions={{
tabBarActiveTintColor: 'tomato',
tabBarInactiveTintColor: 'gray',
headerShown: false,
}}
>
<Tab.Screen
name="Inicio"
component={HomeScreen}
options={{
tabBarLabel: 'Inicio',
tabBarIcon: ({ color, size }) => <AntDesign name="home" size={size} color={color} />,
}}
/>
<Tab.Screen
name="Buscar"
component={SearchScreen}
options={{
tabBarLabel: 'Buscar',
tabBarIcon: ({ color, size }) => <FontAwesome name="search" size={size} color={color} />,
}}
/>
<Tab.Screen
name="Perfil"
component={PerfilStackNavigator} // Aquí incluimos el Stack.Navigator
options={{
tabBarLabel: 'Perfil',
tabBarIcon: ({ color, size }) => <FontAwesome name="user" size={size} color={color} />,
}}
/>
</Tab.Navigator>
);
}
Paso 3: Configurar el Navegador Principal
El navegador principal contendrá el Tab.Navigator. Este es el nivel raíz de la navegación de la aplicación.
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import MainTabNavigator from './MainTabNavigator';
export default function App() {
return (
<NavigationContainer>
<MainTabNavigator />
</NavigationContainer>
);
}
Paso 4: Crear las Pantallas
Ejemplo básico de una pantalla como LoginScreen:
import React from 'react';
import { View, Text, Button } from 'react-native';
export default function LoginScreen({ navigation }) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Pantalla de Login</Text>
<Button title="Ir a Configuraciones" onPress={() => navigation.navigate('Configuraciones')} />
</View>
);
}
Paso 5: Personalizar Navegación
Puedes personalizar estilos, animaciones y opciones del navegador. Por ejemplo, agrega un título o cambia el estilo de transición para el Stack.Navigator dentro de Perfil:
<Stack.Navigator
initialRouteName="Login"
screenOptions={{
headerStyle: { backgroundColor: 'tomato' },
headerTintColor: '#fff',
headerTitleStyle: { fontWeight: 'bold' },
}}
>
{/* Tus pantallas aquí */}
</Stack.Navigator>
Resultado Final
Con esta configuración, tienes:
- Un
Tab.Navigatorcon tres pestañas (Inicio,Buscar,Perfil). - Un
Stack.Navigatordentro dePerfilque permite navegar entreLoginyConfiguraciones.
Prueba la Navegación
Ejecuta tu aplicación y navega entre las pestañas y las pantallas internas:
npm start

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.