- Start med at oprette en ny projekt
npx create-expo-app --template blank 02_Navitation
Husk at navigere indtil projektet med cd 02_Navitation
- Oprette fil strukturen:
- Mappe kald "components"
- Mappe kald "screens"
- Ind i screens mappen: Mappe kald "StackScreens"
- Installér de dependencies som vi skal bruge:
- seb skal lige teste dem af
I denne del skal vi bygge en tab navigator til at navigere mellem 3 tabs
- Opret de skærme som vi skal navigere imellem i "screens" mappen:
- HomeScreen.js
- SettingsScreen.js
- UserProfileScreen.js
-
Kopier koden ind fra App.js ind i hver fil - Husk at ændre
export default function App() {
til navnet på den pågændende skærm. Eks.: i HomeScreen.js ændres funktionnavnet til HomeScreen -export default function HomeScreen() {
-
Ændre også i
<Text>
teksten til "Welcome to the <--Skærmnavn-->" så man kan se forskellen i dem. -
Gå nu ind i app.js filen og importer de nyopretterede filer:
import HomeScreen...
-
Når dette er sket, er du klar til at begynde med at bygge din Tab Navigator
- Vi skal arbejde i App.js
- Importere føglende pakker ind til filen
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
-
Før
export default function App()
funktion indsætteconst Tab = createBottomTabNavigator();
. Dette funktion sørger for at navigation mellem tabs fungere. -
Slette alt ind i return funktion, og indsætte:
<NavigationContainer>
<Tab.Navigator>
{/* Noget kommer her, så slet mig helt i næste step */}
</Tab.Navigator>
</NavigationContainer>
- Good to remember: Alt navitation i react native skal altid være i en "NavigationContainer"
- Nu skal vi til at definere de forskellige tabs som vores tab navigator skal indeholde. For at tilføj en tab bruger man:
<Tab.Screen name="Navnet på tab" component={DenImporteretScreen} />
Eks. med HomeScreen:
<Tab.Screen name="Home" component={HomeScreen} />
-
Blive ved og tilføj Details og Settings
-
Start din app og se om det hele fungere! :-)
Sluk jeres app samt jeres server før i fortsætter her. Det gør i ved at trykke på crtl + c i terminalen (control + c på Mac)
- Start med at oprette de filer som vi skal bruge:
- I components mappen:
- ButtonComponents.js
- StackComponent.js
- I screens/StackScreens mappen:
- AppDetailsScreen.js
- UserProfileScreen.js
-
Igen, kopier basis snippet ind i hver fil, den kan du hente nederst i denne guide under Snippets. Husk at tilpasse navnet på funktionen!
-
Gå til din StackComponent.js hvor vi skal arbejde videre i de næste steps.
-
Importere createStackNavigator:
import { createStackNavigator } from '@react-navigation/stack';
-
Lige som med tab screen skal vi indsætte
const Stack = createStackNavigator();
inden vores component funktion. -
Slette alt i
return
og tilføj:
<Stack.Navigator initialRouteName="Details Screen">
<Stack.Screen name="Details Screen" component={DetailsScreen} />
<Stack.Screen name="User Profile" component={UserProfileScreen} />
<Stack.Screen name="App Details" component={AppDetailsScreen} />
</Stack.Navigator>
Og så tænker du: "Hvorfor er der så ikke en NavigationContainer her???" Se næste step:
- Tilbage i din App.js fil ind i din Tab navigator, erstat din DetailScreen component med StackComponent. Sådan skal det se ud:
<Tab.Screen name="Details" component={StackNavigation} />
. Fordi vi indsætter vores Stack Navigator ind i vores Tab Navigator, er den ind i en Navigation Container!
Næste step i Stack Navigation er at får navigationen til at fungere, men til det, skal vi have nogle knapper. Fordi vi ønsker at genbrug knap-designet flere gang, laver vi en component. Så gå til ButtonComponent.js for at lave den.
-
Vi skal have nogle props, så vi kan gøre knappens tekst og funktionalitet variabel. Derfor insæt
{ title, onPress }
i din componentets funktion, sådan at den ser sådan ud:export default function ButtonComponent({ title, onPress }){...
-
Erstat alt i
return
med:
<Pressable style={styles.button} onPress={onPress}>
<Text style={styles.text}>{title}</Text>
</Pressable>
- I din styles sektion, fjern container style og tilføj styling til button og text:
button: {
alignItems: 'center',
justifyContent: 'center',
paddingVertical: 12,
paddingHorizontal: 32,
borderRadius: 50,
elevation: 3,
backgroundColor: 'green',
margin: 20,
},
text: {
fontSize: 16,
lineHeight: 21,
fontWeight: 'bold',
letterSpacing: 0.25,
color: 'white',
},
- Så er din button component klar, og vi fortsætter udvikling på Stack Navigator.
- I din DetailsScreen.js, tilføj nedenstående snippet før din DetailScreen funktion. Snippet definerer navigationsfunktionen
const navController = (navigation, route) =>{
navigation.navigate(route)
}
-
Ind i DetailScreen funktion, indsæt
{navigation}
i mellem parenteses. -
Slet
<Text> Welcome...</Text>
-
Importere din ButtonComponent og indsæt koden ind i
<View>
hvor jeres text lå hen.
<ButtonComponent onPress ={()=>navController(navigation,'User Profile')} title="User Profile"/>
<ButtonComponent onPress ={()=>navController(navigation,'App Details')} title="App Details"/>
- Ind i container style for henholdsvis AppDetails.js screen og UserProfileScreen.js indsætte:
borderWidth: 10,
borderColor: 'red',
&
borderWidth: 10,
borderColor: 'yellow',
- Tænd jeres app og se om i kan navigere rundt!
- Hvis du ønsker en knap som kan navigere tilbage, kan du anvende din Button component i AppDetailsScreen.js og UserProfilScreen.js. På dens OnPress funktion, kan i brug koden:
onPress ={()=>navigation.goBack()}
for at returnere til den forige skærm. Samt kan man søg på hvordan man kan fjerne den standart header som kommer automatisk med på hver side. Find inspiration her!
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
export default function SomeComponent() {
return (
<View style={styles.container}>
<Text>Some text here!!!!</Text>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});