FlatList erzeugt Einträge erst, wenn sie sichtbar werden. Damit bleiben auch lange Listen performant.
<FlatList
data={cities}
keyExtractor={(city) => city.name}
renderItem={({ item }) => <CityRow city={item} />}
ItemSeparatorComponent={Divider}
/>Jede Datei in app/ ist eine Route. Der Stack im Layout verwaltet einen Stapel von Screens.
app/index.tsx → /, der erste Screenapp/weather.tsx → /weatherrouter.push('/weather') legt den Screen auf den Stapelrouter.back(), Zurück-Pfeil oder Zurück-GesteParameter kommen über die URL und sind immer Strings. Gelesen werden sie mit useLocalSearchParams.
const { name, latitude, longitude } = useLocalSearchParams<{
name: string;
latitude: string;
longitude: string;
}>();Jeder Wetter-Screen ruft useWeather(city) auf und lädt beim Öffnen. Das ist schon seit Schritt 7 so.
Aufgabe für den Agent: ein Repository für Open-Meteo bauen und im Hook einsetzen.
npx tsc --noEmit und npx expo lint, App testenfetch ist in React Native eingebaut, wie im Browser. Ein Paket braucht es nicht.
const params = new URLSearchParams({
latitude: String(city.latitude),
longitude: String(city.longitude),
current: 'temperature_2m,weather_code,wind_speed_10m',
});
const response = await fetch(`https://api.open-meteo.com/v1/forecast?${params}`);
if (!response.ok) throw new Error(`HTTP-Fehler ${response.status}`);
const json = (await response.json()) as ForecastResponseDto;
return toCurrentWeather(json.current);Die JSON-Antwort bekommt eigene Typen (DTOs). Sie werden auf unser Datenmodell abgebildet.
// Ausschnitt der Antwort von https://api.open-meteo.com/v1/forecast
export type ForecastResponseDto = {
current: CurrentDto;
};
export type CurrentDto = {
temperature_2m: number;
weather_code: number;
wind_speed_10m: number;
};Für echte Daten wurde keine einzige Komponente geändert.
$ git diff --stat schritt-08 schritt-09
src/data/api-weather-repository.ts | 50 ++++++++++++++++++++++++++++++++++++++
src/data/api/open-meteo-dto.ts | 10 ++++++++
src/ui/use-weather.ts | 4 +--
3 files changed, 62 insertions(+), 2 deletions(-)Selbst oder mit einem Coding Agent umsetzen, jeweils Plan und Diff prüfen.