# React Native en GraphQL in 2026: Apollo Client, Queries en Sollicitatievragen > Integreer GraphQL met React Native met Apollo Client 4.0. Deze tutorial behandelt queries, mutations, caching-strategieën en veelgestelde sollicitatievragen over mobiele GraphQL-ontwikkeling. - 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 is uitgegroeid tot de voorkeurslaag voor API's in React Native-applicaties die flexibele data-ophaling en efficiënt netwerkgebruik vereisen. Apollo Client 4.0, uitgebracht eind 2025, brengt een slankere architectuur met 20-30% kleinere bundles en verbeterde TypeScript-ondersteuning, specifiek ontworpen voor mobiele omgevingen. > **Belangrijke Wijzigingen in Apollo Client 4.0** > > Apollo Client 4.0 ontkoppelt React-specifieke exports naar `@apollo/client/react`, ondersteunt React 19 Suspense en de React Compiler, en vervangt de monolithische `ApolloError` door specifieke foutklassen voor betere debugging. ## Apollo Client 4 Configureren in React Native Het installatieproces blijft eenvoudig. Apollo Client 4.0 werkt met zowel Expo als pure React Native-projecten. ```bash # Installation npm install @apollo/client graphql ``` De client-initialisatie vereist een `HttpLink` voor netwerkverzoeken en een `InMemoryCache` voor lokaal state management. ```typescript // src/apollo/client.ts import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client'; const httpLink = new HttpLink({ uri: 'https://api.example.com/graphql', // Enable text streaming for @defer and subscriptions fetchOptions: { reactNative: { textStreaming: true }, }, }); export const apolloClient = new ApolloClient({ link: httpLink, cache: new InMemoryCache({ typePolicies: { Query: { fields: { // Merge paginated results products: { keyArgs: ['category'], merge(existing = [], incoming) { return [...existing, ...incoming]; }, }, }, }, }, }), }); ``` De `typePolicies`-configuratie regelt cache-normalisatie voor gepagineerde data, een veelvoorkomende vereiste in mobiele apps met oneindig scrollen. ## De App Wrappen met ApolloProvider Het provider-patroon verbindt Apollo Client met de React componentenboom. Plaats deze op het hoogste niveau, typisch in `App.tsx` of de 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 importeert React hooks uit `@apollo/client/react` in plaats van het hoofdingangspunt. Deze wijziging vermindert de bundlegrootte wanneer de core client in niet-React contexten draait. ## Type-Safe GraphQL Queries Schrijven GraphQL Code Generator produceert TypeScript-types uit het schema, waardoor runtime type-mismatches worden geëlimineerd. Installeer het samen met de client plugin. ```bash # Install codegen tools npm install -D @graphql-codegen/cli @graphql-codegen/client-preset ``` De codegen-configuratie verwijst naar het schema en specificeert outputlocaties. ```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; ``` Het uitvoeren van `npx graphql-codegen` genereert getypeerde document nodes die de `useQuery` hook consumeert. ## Data Ophalen met useQuery De `useQuery` hook beheert laadstatussen, fouten en cache-updates. Apollo Client 4.0 introduceert de `dataState` API voor voorspelbaardere state-overgangen. ```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 }, // Fetch from cache first, then network fetchPolicy: 'cache-and-network', // Keep previous data while fetching new notifyOnNetworkStatusChange: true, }); if (error) { return Fout: {error.message}; } const loadMore = () => { fetchMore({ variables: { offset: data?.products.length ?? 0 }, }); }; return ( item.id} renderItem={({ item }) => } onEndReached={loadMore} onEndReachedThreshold={0.5} ListFooterComponent={loading ? : null} /> ); } ``` De `cache-and-network` fetch policy toont gecachte data direct terwijl op de achtergrond van de server wordt ververst. Dit patroon vermindert de waargenomen latentie op mobiele netwerken. ## Mutations en Optimistische Updates Mutations wijzigen serverdata en updaten de lokale cache. Optimistische responses geven direct feedback voordat de server de wijziging bevestigt. ```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, { // Optimistic response for instant UI feedback optimisticResponse: ({ productId, quantity }) => ({ addToCart: { __typename: 'Cart', id: 'current-cart', items: [], totalPrice: 0, }, }), // Update cache after mutation 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 }; } ``` De `cache.modify` methode werkt gecachte velden direct bij zonder de gehele query opnieuw op te halen. Deze aanpak minimaliseert netwerkverzoeken op mobiele verbindingen. ## Netwerkfouten Afhandelen in Mobiele Apps Apollo Client 4.0 vervangt de generieke `ApolloError` door specifieke foutklassen. De statische `.is()` methodes maken type-safe foutafhandeling mogelijk. ```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) { // Network failure (offline, timeout, DNS) if (NetworkError.is(error)) { return ( Verbinding mislukt. Controleer je internetverbinding.