Axios in React Native verwenden
Axios verwenden
~10 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Axios ist eine beliebte HTTP-Bibliothek, die gegenüber der eingebauten fetch()-Funktion (siehe folgendes Kapitel) einige Komfortfunktionen mitbringt: automatische JSON-Umwandlung, Interceptors, bessere Fehlerobjekte und eine baseURL-Konfiguration.
1. Beschreibung
Axios funktioniert in React Native identisch wie im Browser oder in Node.js, da es intern auf XMLHttpRequest aufbaut, das React Natives JavaScript-Umgebung ebenfalls bereitstellt. Installation über npm install axios, danach direkt importierbar.
2. Kurzes Beispiel
import axios from 'axios';
const antwort = await axios.get('https://api.example.com/benutzer');
console.log(antwort.data); // bereits als JS-Objekt, kein .json() nötig3. Komplettes Projekt: GitHub-Benutzersuche
npx create-expo-app axios-demo
cd axios-demo
npm install axiosimport axios from 'axios';
const githubClient = axios.create({
baseURL: 'https://api.github.com',
timeout: 8000,
});
githubClient.interceptors.response.use(
(antwort) => antwort,
(fehler) => {
console.log('API-Fehler:', fehler.message);
return Promise.reject(fehler);
}
);
export default githubClient;import { useState } from 'react';
import { View, TextInput, Button, Text, Image, ActivityIndicator, StyleSheet } from 'react-native';
import githubClient from './api/githubClient';
export default function App() {
const [benutzername, setBenutzername] = useState('facebook');
const [profil, setProfil] = useState(null);
const [ladeVorgang, setLadeVorgang] = useState(false);
const [fehlermeldung, setFehlermeldung] = useState(null);
async function suchen() {
setLadeVorgang(true);
setFehlermeldung(null);
try {
const antwort = await githubClient.get(`/users/${benutzername}`);
setProfil(antwort.data);
} catch (fehler) {
if (fehler.response?.status === 404) {
setFehlermeldung('Benutzer nicht gefunden.');
} else {
setFehlermeldung('Netzwerkfehler, bitte erneut versuchen.');
}
setProfil(null);
} finally {
setLadeVorgang(false);
}
}
return (
<View style={styles.container}>
<TextInput
style={styles.input}
value={benutzername}
onChangeText={setBenutzername}
placeholder="GitHub-Benutzername"
autoCapitalize="none"
/>
<Button title="Suchen" onPress={suchen} />
{ladeVorgang && <ActivityIndicator style={styles.spinner} />}
{fehlermeldung && <Text style={styles.fehler}>{fehlermeldung}</Text>}
{profil && (
<View style={styles.profil}>
<Image source={{ uri: profil.avatar_url }} style={styles.avatar} />
<Text style={styles.name}>{profil.name ?? profil.login}</Text>
<Text>{profil.public_repos} öffentliche Repos</Text>
</View>
)}
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, paddingTop: 60, paddingHorizontal: 24 },
input: { borderWidth: 1, borderColor: '#d1d5db', borderRadius: 8, padding: 10, marginBottom: 10 },
spinner: { marginTop: 20 },
fehler: { color: '#dc2626', marginTop: 12 },
profil: { alignItems: 'center', marginTop: 24 },
avatar: { width: 96, height: 96, borderRadius: 48, marginBottom: 12 },
name: { fontSize: 18, fontWeight: 'bold' },
});4. Erklärung
axios.create({{ baseURL, timeout }})erzeugt eine eigene Client-Instanz mit fest hinterlegter Basis-URL – jeder Aufruf muss danach nur noch den Pfad angeben (/users/facebookstatt der vollen URL).interceptors.response.use()fängt JEDE Antwort/JEDEN Fehler dieses Clients zentral ab – hier für einheitliches Fehler-Logging genutzt, in echten Apps oft auch für automatisches Token-Refresh.fehler.response?.status– Axios unterscheidet zwischen einem echten HTTP-Fehlerstatus (Server hat geantwortet, aber z.B. 404) und einem Netzwerkfehler (keine Antwort erhalten) –responseist im zweiten Fallundefined, daher?..antwort.dataist bereits das geparste JSON-Objekt – anders als beifetch()ist kein manuellesawait antwort.json()nötig (siehe nächstes Kapitel für den direkten Vergleich).