Introducció
El Stack Navigator és un dels tipus de navegadors més utilitzats en React Navigation. Permet als desenvolupadors apilar pantalles una sobre l'altra, de manera que es pot navegar endavant i enrere entre pantalles, similar a com funcionen les pàgines en un navegador web.
Configuració inicial
Instal·lació de React Navigation
Abans de començar a utilitzar el Stack Navigator, necessitem instal·lar React Navigation i les seves dependències. Executa les següents comandes al teu terminal:
npm install @react-navigation/native npm install @react-navigation/stack npm install react-native-screens react-native-safe-area-context
Configuració bàsica
Després d'instal·lar les dependències, hem de configurar el nostre projecte per utilitzar React Navigation. Afegeix el següent codi al teu fitxer principal (normalment App.js):
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './screens/HomeScreen';
import DetailsScreen from './screens/DetailsScreen';
const Stack = createStackNavigator();
function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default App;Creació de pantalles
HomeScreen
Crea un fitxer anomenat HomeScreen.js dins d'una carpeta screens i afegeix el següent codi:
import React from 'react';
import { View, Text, Button } from 'react-native';
function HomeScreen({ navigation }) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Home Screen</Text>
<Button
title="Go to Details"
onPress={() => navigation.navigate('Details')}
/>
</View>
);
}
export default HomeScreen;DetailsScreen
Crea un fitxer anomenat DetailsScreen.js dins de la mateixa carpeta screens i afegeix el següent codi:
import React from 'react';
import { View, Text, Button } from 'react-native';
function DetailsScreen({ navigation }) {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Details Screen</Text>
<Button
title="Go to Home"
onPress={() => navigation.navigate('Home')}
/>
<Button
title="Go back"
onPress={() => navigation.goBack()}
/>
</View>
);
}
export default DetailsScreen;Navegació entre pantalles
Navegar a una pantalla específica
Per navegar a una pantalla específica, utilitzem el mètode navigate proporcionat per l'objecte navigation:
Tornar a la pantalla anterior
Per tornar a la pantalla anterior, utilitzem el mètode goBack:
Passar paràmetres entre pantalles
Enviar paràmetres
Podem enviar paràmetres a una pantalla utilitzant el mètode navigate:
<Button
title="Go to Details"
onPress={() => navigation.navigate('Details', { itemId: 86, otherParam: 'anything you want here' })}
/>Rebre paràmetres
Podem rebre els paràmetres a la pantalla de destinació utilitzant l'objecte route:
function DetailsScreen({ route, navigation }) {
const { itemId, otherParam } = route.params;
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Details Screen</Text>
<Text>itemId: {itemId}</Text>
<Text>otherParam: {otherParam}</Text>
<Button
title="Go to Home"
onPress={() => navigation.navigate('Home')}
/>
<Button
title="Go back"
onPress={() => navigation.goBack()}
/>
</View>
);
}Personalització del Stack Navigator
Opcions de pantalla
Podem personalitzar cada pantalla utilitzant les opcions de pantalla (screenOptions):
<Stack.Navigator
initialRouteName="Home"
screenOptions={{
headerStyle: {
backgroundColor: '#f4511e',
},
headerTintColor: '#fff',
headerTitleStyle: {
fontWeight: 'bold',
},
}}
>
<Stack.Screen
name="Home"
component={HomeScreen}
options={{ title: 'My Home' }}
/>
<Stack.Screen
name="Details"
component={DetailsScreen}
options={{ title: 'Details' }}
/>
</Stack.Navigator>Exercici pràctic
Objectiu
Crea una aplicació amb tres pantalles: HomeScreen, ProfileScreen i SettingsScreen. Implementa la navegació entre aquestes pantalles utilitzant el Stack Navigator.
Solució
- Crea els fitxers
ProfileScreen.jsiSettingsScreen.jsdins de la carpetascreens. - Implementa el codi per a cada pantalla similar a com ho hem fet per a
HomeScreeniDetailsScreen. - Afegeix les noves pantalles al
Stack Navigatordins del fitxerApp.js.
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './screens/HomeScreen';
import ProfileScreen from './screens/ProfileScreen';
import SettingsScreen from './screens/SettingsScreen';
const Stack = createStackNavigator();
function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Profile" component={ProfileScreen} />
<Stack.Screen name="Settings" component={SettingsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
export default App;Conclusió
El Stack Navigator és una eina poderosa per gestionar la navegació en aplicacions React Native. Permet una navegació intuïtiva i fàcil d'implementar entre pantalles, amb la possibilitat de personalitzar l'aparença i el comportament de cada pantalla. Amb la pràctica, podràs crear aplicacions complexes amb una navegació fluida i eficient.
Curs de React Native
Mòdul 1: Introducció a React Native
- Què és React Native?
- Configuració de l'entorn de desenvolupament
- Aplicació Hello World
- Comprendre JSX
- Components i Props
Mòdul 2: Components bàsics i estilització
- Visió general dels components bàsics
- Text, View i Image
- Estilització amb Flexbox
- Gestió de l'entrada de l'usuari
- ScrollView i ListView
Mòdul 3: Estat i cicle de vida
- Mètodes d'estat i cicle de vida
- Gestió d'esdeveniments
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Navegació
- Introducció a React Navigation
- Stack Navigator
- Tab Navigator
- Drawer Navigator
- Passar paràmetres a les rutes
Mòdul 5: Xarxes i dades
- Obtenir dades amb Fetch API
- Utilitzar Axios per a sol·licituds HTTP
- Gestió d'errors de xarxa
- AsyncStorage per a dades locals
- Integració amb APIs REST
Mòdul 6: Conceptes avançats
Mòdul 7: Desplegament i publicació
- Construcció per a iOS
- Construcció per a Android
- Publicació a l'App Store
- Publicació a Google Play
- Integració i lliurament continus
