# React Native und GraphQL 2026: Apollo Client, Abfragen und Interview-Fragen > Integration von GraphQL in React Native mit Apollo Client 4.0. Dieses Tutorial behandelt Queries, Mutations, Caching-Strategien und häufige Interview-Fragen zur mobilen GraphQL-Entwicklung. - Published: 2026-08-20 - Updated: 2026-08-20 - Author: Anthony Fillion-Maillet - Tags: react-native, graphql, apollo-client, mobile, api, interview - Reading time: 9 min --- GraphQL hat sich zur bevorzugten API-Schicht für React Native-Anwendungen entwickelt, die flexibles Datenabrufen und effiziente Netzwerknutzung erfordern. Apollo Client 4.0, Ende 2025 veröffentlicht, bringt eine schlankere Architektur mit 20-30% kleineren Bundles und verbesserter TypeScript-Unterstützung, die speziell für mobile Umgebungen konzipiert wurde. > **Wichtige Änderungen in Apollo Client 4.0** > > Apollo Client 4.0 entkoppelt React-spezifische Exports nach `@apollo/client/react`, unterstützt React 19 Suspense sowie den React Compiler und ersetzt den monolithischen `ApolloError` durch spezifische Fehlerklassen für besseres Debugging. ## Apollo Client 4 in React Native einrichten Der Installationsprozess bleibt unkompliziert. Apollo Client 4.0 funktioniert sowohl mit Expo als auch mit reinen React Native-Projekten. ```bash # Installation npm install @apollo/client graphql ``` Die Client-Initialisierung erfordert einen `HttpLink` für Netzwerkanfragen und einen `InMemoryCache` für die lokale Zustandsverwaltung. ```typescript // src/apollo/client.ts import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client'; const httpLink = new HttpLink({ uri: 'https://api.example.com/graphql', // Text-Streaming für @defer und Subscriptions aktivieren fetchOptions: { reactNative: { textStreaming: true }, }, }); export const apolloClient = new ApolloClient({ link: httpLink, cache: new InMemoryCache({ typePolicies: { Query: { fields: { // Paginierte Ergebnisse zusammenführen products: { keyArgs: ['category'], merge(existing = [], incoming) { return [...existing, ...incoming]; }, }, }, }, }, }), }); ``` Die `typePolicies`-Konfiguration behandelt die Cache-Normalisierung für paginierte Daten – eine häufige Anforderung in mobilen Apps mit unendlichem Scrollen. ## Die App mit ApolloProvider umhüllen Das Provider-Muster verbindet Apollo Client mit dem React-Komponentenbaum. Er sollte auf der obersten Ebene platziert werden, typischerweise in `App.tsx` oder dem Expo Router Layout. ```tsx // App.tsx import { ApolloProvider } from '@apollo/client/react'; import { apolloClient } from './src/apollo/client'; import { RootNavigator } from './src/navigation'; export default function App() { return ( ); } ``` Apollo Client 4.0 importiert React Hooks aus `@apollo/client/react` statt aus dem Haupt-Einstiegspunkt. Diese Änderung reduziert die Bundle-Größe, wenn der Core-Client in Nicht-React-Kontexten läuft. ## Typsichere GraphQL-Queries schreiben GraphQL Code Generator erzeugt TypeScript-Typen aus dem Schema und eliminiert so Runtime-Typabweichungen. Die Installation erfolgt zusammen mit dem Client-Plugin. ```bash # Codegen-Tools installieren npm install -D @graphql-codegen/cli @graphql-codegen/client-preset ``` Die Codegen-Konfiguration verweist auf das Schema und spezifiziert die Ausgabeorte. ```typescript // codegen.ts import type { CodegenConfig } from '@graphql-codegen/cli'; const config: CodegenConfig = { schema: 'https://api.example.com/graphql', documents: ['src/**/*.tsx', 'src/**/*.ts'], generates: { './src/gql/': { preset: 'client', config: { documentMode: 'string', }, }, }, }; export default config; ``` Das Ausführen von `npx graphql-codegen` generiert typisierte Document Nodes, die der `useQuery`-Hook verwendet. ## Daten mit useQuery abrufen Der `useQuery`-Hook verwaltet Ladezustände, Fehler und Cache-Aktualisierungen. Apollo Client 4.0 führt die `dataState`-API für vorhersehbarere Zustandsübergänge ein. ```tsx // src/screens/ProductListScreen.tsx import { useQuery } from '@apollo/client/react'; import { graphql } from '../gql'; import { ActivityIndicator, FlatList, Text, View } from 'react-native'; const GET_PRODUCTS = graphql(` query GetProducts($category: String!, $limit: Int, $offset: Int) { products(category: $category, limit: $limit, offset: $offset) { id name price imageUrl } } `); export function ProductListScreen({ category }: { category: string }) { const { data, loading, error, fetchMore } = useQuery(GET_PRODUCTS, { variables: { category, limit: 20, offset: 0 }, // Zuerst aus Cache laden, dann Netzwerk fetchPolicy: 'cache-and-network', // Vorherige Daten während des Abrufs behalten notifyOnNetworkStatusChange: true, }); if (error) { return Fehler: {error.message}; } const loadMore = () => { fetchMore({ variables: { offset: data?.products.length ?? 0 }, }); }; return ( item.id} renderItem={({ item }) => } onEndReached={loadMore} onEndReachedThreshold={0.5} ListFooterComponent={loading ? : null} /> ); } ``` Die `cache-and-network`-Fetch-Policy zeigt gecachte Daten sofort an, während im Hintergrund vom Server aktualisiert wird. Dieses Muster reduziert die wahrgenommene Latenz in mobilen Netzwerken. ## Mutations und optimistische Updates Mutations ändern Server-Daten und aktualisieren den lokalen Cache. Optimistische Antworten liefern sofortiges Feedback, bevor der Server die Änderung bestätigt. ```tsx // src/hooks/useAddToCart.ts import { useMutation } from '@apollo/client/react'; import { graphql } from '../gql'; const ADD_TO_CART = graphql(` mutation AddToCart($productId: ID!, $quantity: Int!) { addToCart(productId: $productId, quantity: $quantity) { id items { id product { id name } quantity } totalPrice } } `); export function useAddToCart() { const [addToCart, { loading }] = useMutation(ADD_TO_CART, { // Optimistische Antwort für sofortiges UI-Feedback optimisticResponse: ({ productId, quantity }) => ({ addToCart: { __typename: 'Cart', id: 'current-cart', items: [], totalPrice: 0, }, }), // Cache nach Mutation aktualisieren update(cache, { data }) { if (!data?.addToCart) return; cache.modify({ id: cache.identify({ __typename: 'Cart', id: 'current-cart' }), fields: { items: () => data.addToCart.items, totalPrice: () => data.addToCart.totalPrice, }, }); }, }); return { addToCart, loading }; } ``` Die `cache.modify`-Methode aktualisiert gecachte Felder direkt, ohne die gesamte Query neu abzurufen. Dieser Ansatz minimiert Netzwerkanfragen bei mobilen Verbindungen. ## Netzwerkfehler in mobilen Apps behandeln Apollo Client 4.0 ersetzt den generischen `ApolloError` durch spezifische Fehlerklassen. Die statischen `.is()`-Methoden ermöglichen typsichere Fehlerbehandlung. ```tsx // src/components/ErrorBoundary.tsx import { NetworkError, GraphQLErrors } from '@apollo/client/errors'; import { Text, Button, View } from 'react-native'; interface Props { error: Error; onRetry: () => void; } export function QueryErrorHandler({ error, onRetry }: Props) { // Netzwerkfehler (offline, Timeout, DNS) if (NetworkError.is(error)) { return ( Verbindung fehlgeschlagen. Überprüfen Sie Ihre Internetverbindung.