I denne opgave vil du lære at arbejde med arrays, hente data med fetch
, og bruge FlatList
-komponenten til at vise en liste i React Native. Du vil få kodebider og "how-to" instruktioner til at bygge funktionaliteten selv.
Simulator.Screen.Recording.-.iPhone.8.-.2021-08-06.at.22.54.08.mp4
https://reactnative.dev/docs/textinput
https://reactnative.dev/docs/flatlist
https://reactnative.dev/docs/style
https://reactnative.dev/docs/statusbar
https://reactnative.dev/docs/flatlist
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
-
Start med at navigere til din ønsket mappe i terminalen og opret så et nyt React Native projekt:
npx create-expo-app --template blank ListProject
Husk at navigere ind i projektet med
cd ListProject
-
Opret følgende mapper og filer:
- En mappe kaldet
data
med en filconst.js
indeholdende:export const CARS = ["Audi", "BMW", "Tesla", "Alfa oreo", "Ford", "Kia", "Rover", "Saab", "Seat", "Skoda", "Smart", "SsangYong", "Subaru", "Suzuki"]; export const COUNTRIES = ["Denmark", "England", "Spanien", "Italien"]; export const GET_USERS_URL = 'https://randomuser.me/api?results=';
- En mappe kaldet
screens
med filerne:ArrayListScreen.js
FetchListScreen.js
FlatListScreen.js
- En mappe kaldet
Opsæt en Bottom Tab Navigator i din app, så du kan navigere mellem de tre skærme, du har oprettet: FlatListScreen
, ArrayListScreen
, og FetchListScreen
.
For at bruge navigation i React Native skal du først installere de nødvendige pakker.
-
Installer React Navigation:
npm install @react-navigation/native
-
Installer nødvendige dependencies til navigation:
npm install @react-navigation/bottom-tabs react-native-screens react-native-safe-area-context
-
Åbn din
App.js
fil, og start med at importere de nødvendige komponenter:import { StatusBar } from 'expo-status-bar'; import { StyleSheet, View } from 'react-native'; import { NavigationContainer } from '@react-navigation/native'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
-
Importér de tre skærme, som du har oprettet:
import ArrayListScreen from './screens/ArrayListScreen'; import FetchListScreen from './screens/FetchListScreen'; import FlatListScreen from './screens/FlatListScreen';
-
Opgave:
- Opret en
Tab.Navigator
, der viser de tre skærme som tabs i bunden af appen. - For hver skærm, skal du give en
name
og encomponent
for at tilføje den til navigatoren.
Du kan bruge følgende som guide:
const Tab = createBottomTabNavigator(); export default function App() { return ( <NavigationContainer> <Tab.Navigator> {/* Tilføj FlatListScreen som en skærm */} {/* Tilføj ArrayListScreen som en skærm */} {/* Tilføj FetchListScreen som en skærm */} </Tab.Navigator> </NavigationContainer> ); }
- Opret en
-
Opgave:
- Tilføj en simpel styling til appen for at sikre, at indholdet bliver centreret, og at baggrunden er hvid.
Brug dette som en guide:
const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', }, });
-
Start din app ved at køre:
npx expo start
-
Tjek, om du kan se de tre tabs i bunden af skærmen.
FlatListScreen skal bruge FlatList
til at vise en liste over biler.
-
Åbn
FlatListScreen.js
, og start med at importere de nødvendige komponenter:import { StatusBar } from 'expo-status-bar'; import { StyleSheet, Text, View, FlatList } from 'react-native';
husk også at importere din
{CARS}
data! -
Opgave:
- Brug
FlatList
til at vise hvert bilnavn i en liste. - Brug
data
-props til at giveCARS
arrayet tilFlatList
. - I
renderItem
skal du returnere enText
-komponent, der viser hver bil i arrayet.
Du kan bruge dette som en guide:
export default function FlatListScreen() { return ( <View style={styles.container}> <Text style={{ fontSize: 20, textAlign:'center',padding:40 }}>1 Mine biler - Flatlist</Text> <View style={{height: 150 , backgroundColor: 'lightgrey', borderRadius: 10, width: '80%'}}> {/* Opret en FlatList, der viser bilerne fra CARS arrayet */} </View> <StatusBar style="auto" /> </View> ); }
- Brug
-
Stilingsopgave:
- Giv
FlatList
'en en baggrundsfarve og afrundede kanter for at adskille listen visuelt.
- Giv
ArrayListScreen skal bruge map()
til at vise et array af lande.
-
Åbn
ArrayListScreen.js
, og importér de nødvendige komponenter:import { StatusBar } from 'expo-status-bar'; import { StyleSheet, Text, View, ScrollView } from 'react-native';
husk at importere din
{COUNTRIES}
data!! -
Opgave:
- Brug
map()
til at iterere overCOUNTRIES
-arrayet og vise hvert land i enText
-komponent. - Vis listen over lande inde i en
ScrollView
, så du kan rulle igennem dem.
Du kan bruge dette som en guide:
export default function ArrayListScreen() { return ( <View style={styles.container}> <Text style={{ fontSize: 20, textAlign:'center',padding:40 }}>2 KvartFinale lande - Array Map</Text> <View style={{height: 150 , backgroundColor: 'lightgrey', borderRadius: 10, width: '80%'}}> <ScrollView> {/* Brug map til at iterere over COUNTRIES arrayet */} </ScrollView> </View> <StatusBar style="auto" /> </View> ); }
- Brug
-
Stilingsopgave:
- Giv
ScrollView
'en en baggrundsfarve og sørg for at stilen er konsistent med de andre skærme.
- Giv
FetchListScreen skal bruge fetch()
til at hente en liste af brugere og vise dem i en liste.
-
Åbn
FetchListScreen.js
, og start med at importere de nødvendige hooks og komponenter:import { StatusBar } from 'expo-status-bar'; import { StyleSheet, Text, View, Image, SafeAreaView, ScrollView, TextInput, TouchableWithoutFeedback, Keyboard } from 'react-native'; import { useState, useEffect } from 'react';
Huske også at importere din
{GET_USERS_URL}
data! -
Opgave:
- Opret en state til at gemme brugere og en funktion til at hente data fra
GET_USERS_URL
. - Brug
useEffect
til at hente data, når komponenten indlæses. - Vis brugerens navn og billede i en liste.
Du kan bruge dette som en guide:
export default function FetchListScreen() { const [user, setUser] = useState([]); const [msg, setMsg] = useState(""); const [amount, setAmount] = useState(2); const loadUsers = async () => { // Opret fetch-kaldet her } useEffect(() => { loadUsers(); }, [amount]); return ( user.length > 0 ? ( <View style={styles.container}> <Text style={{ fontSize: 20, textAlign:'center',padding:40 }}>2 3 Brugere i liste: {user.length} - Fetch Object list</Text> {/* Opret en TextInput til at ændre antal brugere */} <View style={{height: 350 , backgroundColor: 'lightgrey', borderRadius: 10, width: '80%'}}> <ScrollView> {/* Brug map() til at vise brugerens navn og billede */} </ScrollView> </View> <Text>{msg ? msg :""}</Text> <StatusBar style="auto" /> </View> ) : ( <View style={styles.container}> <Text>Loading...</Text> <StatusBar style="auto" /> </View> ) ); }
- Opret en state til at gemme brugere og en funktion til at hente data fra
-
Ekstra opgave:
- Opret en
TextInput
, der lader brugeren ændre antallet af brugere, som skal hentes. - Sørg for at håndtere fejl i
fetch()
og vis en besked, hvis noget går galt.
- Opret en
-
Start din app ved at køre:
npx expo start
-
Test hver skærm, og sørg for at alle listerne vises korrekt.
- Tilføj ikoner til hver tab i navigatoren ved at bruge
tabBarIcon
-props, så hver skærm har sit eget ikon. - Udvid funktionaliteten i FetchListScreen ved at tilføje flere detaljer om hver bruger - læs mere om api'en her : https://randomuser.me/.