¿Te interesa aprender a gestionar eficazmente la navegación entre pantallas en tus aplicaciones de React Native? El stack de navegación es una técnica clave que permite a los usuarios desplazarse naturalmente por tus aplicaciones. En esta guía aprenderemos el paso a paso para crear un stack y realizar una navegación sencilla mediante botones en React Native, mejorando así la experiencia de usuario de manera notable.
¿Cómo crear pantallas básicas en React Native?
Crear pantallas o screens básicas en nuestra aplicación es el primer paso esencial:
Dentro de SRC, crea una nueva carpeta llamada screens.
Genera dos archivos: homeScreen.js y settingsScreen.js.
Usa la función rápida para creación de componentes en React Native:
importReactfrom'react';import{View,Text}from'react-native';exportdefaultfunctionHomeScreen(){return(<View><Text>Estamos en HomeScreen</Text></View>);}
Este proceso se repite para la pantalla settingsScreen.js, ajustando el texto según corresponda.
¿Qué necesitas para integrar un stack de navegación?
Para administrar la navegación entre pantallas, es necesario incorporar lo siguiente:
Instala y usa la librería @react-navigation/stack:
El orden de las pantallas determina cuál aparece primero, aunque se puede establecer una ruta inicial específica mediante la propiedad initialRouteName.
¿Cómo navegar entre pantallas utilizando botones?
Implementar la navegación mediante botones en React Native implica:
Extraer la propiedad navigation desde props para usar la función navigate:
Crear botones reactivos que llamen a esta función:
<Button title="Ir a Ajustes" onPress={goToSettings}/>
Siguiendo estos pasos, se consigue que al pulsar un botón los usuarios se desplacen fácilmente hacia otras pantallas, con funcionalidad integrada y coherencia visual.
¿Cómo realizar navegación parametrizada entre pantallas?
Además, se puede optimizar avanzando un poco más:
Usa funciones genéricas con parámetros para reutilizar código eficazmente:
He aquí la importancia de saber Inglés y tener comprehensión; la documentación dice que la versión 5 para atrás ya no es mantenida. Lo que da cabida a muchos errores de compatibilidad.
Para evitar horas de debuggeo yo simplemente usé la versión recomendada por la misma documentación y todo funciona correctamente.
Tienes razon, a la final instale la ultima version para que todo funcionara correctamente.
Perdí mucho tiempo con la version 5.x-> Intalé la 6 y todo anda bien.
Antes de que continues esta clase. Instala la versión 6.x de React Navigation. Ahorrate dolores de cabeza.
Exacto, efectivamente me toco realizarlo.
Si. Totalmente de acuerdo.
En caso de que tengan problemas después de instalar nuevas versiones recuerden utilizar este comando de ser necesario
expo start -c
Para los que están en la versión 6 de react-navigation, así quedaría el componente NavigationStack.js
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import HomeScreen from "../screens/HomeScreen";
import Settings from "../screens/SettingsScreen";
const Stack = createNativeStackNavigator();
export default function NavigationStack() {
return (
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Settings" component={Settings} />
</Stack.Navigator>
);
}
Les recomiendo fuertemente seguir la documentación. El curso necesita una actualización en esta parte.
Estas en todo lo correcto amigo, ya hay muchas cosas que han cambiado. Muchas gracias por tu aporte.
Yo agregaría para ir a una pantalla anterior como
navigation.goBack();
Me parece mejorcito extraer enseguida el props así, en vez de colocar (props)
Para los que hayan tenido el problema con @babel/plugin-proposal-export-namespace-from
Tuve que parar obviamente el server, ingresar el comando:
yarn add react-native-reanimated
Luego ir al babel.config.js y colorar ++sobre el final++:
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
'react-native-reanimated/plugin',
],
};
Por último el comando yarn cache clean (muy importante) e iniciar el server normlamente.
Espero que les sirva!
Muchísimas gracias por tu aporte.
Me ayudó a salir del error que tenía.
Graciaaaaas ; )
Lee la documentación!
Cuando les muestre error de importación de CreateStackNavigator
Muy buen dato, aunque no me genero problema.
Para los que ven el curso en el 2024, les recomiendo leer toda la documentación.
usa el siguiente código en el archivo: NavigationStack.js
El curso esta un poco desactualizado, he tenido la ayuda de deepsek para optimizar mas mi codigo, si presentan un problema como el de <NavigationContainer> verifiquen que a la hora de la instalacion no lo instalasen con expo router en caso que si , solamente agreguen la parte del navigationstack
Que diferencia hay entre react-navigation/stack y NativeRouter?
Al final es lo mismo las dos sirven para crear sistema de rutas, pero bajo mi experiencia React Navigation está mucho más madura que NativeRouter.
Para seguirle el ritmo pongan el video en 0.85x por que va a mil por hora 😂
Para hacer un código más elegante y ahorrar líneas pueden realizar la desestructuración de la siguiente manera
Está desactualizado este curso
Ahora es más fácil usando
import { Link } from 'expo-router';
<Link href="/settings">Ir a ajustes</Link>
😎 Les dejo mis notas de esta clase Notion
para los que lo hagan con la version 5 y no les funcione por un error tiene que agregar esta linea en el archivo de babel
plugins: ['react-native-reanimated/plugin'],
saludos
Se usa Stack. porque Stack es una constante que almacena el resultado de createStackNavigator(). Al usar Stack.Navigator y Stack.Screen, accedes a los componentes Navigator y Screen que esta función te proporciona para crear la navegación, como se explica en la clase.
Hola
El shortcut** rnf** no me funciona.
Estoy usando Visual Studio Code.
Podrían ayudarme por favor?
Instala el plugin de snipets para react ES7+ en vscode
como le hago para tipar el props en tyscript
exportdefaultfunctionConfiguracion(props){const{ navigation }= props;constgoToPage=(pageName:string)=>{ navigation.navigate(pageName);};return(<View><Text>Setting</Text><Text>Setting</Text><Text>Setting</Text><Text>Setting</Text><Text>Setting</Text><Button onPress={()=>goToPage("Home")} title="Ir a HOME"/></View>)}```