React Academy · Les

unstable_cache en React cache()

Cache dure functieresultaten per request of tussen requests met de cache-hulpmiddelen van Next.js.

Les 2 van 412 stappen

unstable_cache en React cache() is een gratis React Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Twee cachehulpprogramma's

Next.js biedt twee aanvullende cachehulpprogramma's: unstable_cache voor blijvende caching tussen aanvragen en React's cache() voor deduplicatie per aanvraag.

React cache() — Deduplicatie per aanvraag

cache(fn) uit React onthoudt het resultaat van een functie gedurende één weergaveronde op de server. Twee servercomponenten die dezelfde gecachte functie aanroepen, krijgen hetzelfde resultaat zonder een tweede DB/API-aanroep.

import { cache } from 'react';

export const getUser = cache(async (id: string) => {
  return db.user.findUnique({ where: { id } });
});

// Both components call getUser(id) — only one DB query fires per request
// component A: const user = await getUser('1');
// component B: const user = await getUser('1'); // uses cached result

unstable_cache — Persistente cache

unstable_cache(fn, keyParts, options) bewaart het resultaat tussen aanvragen totdat je het expliciet opnieuw valideert. Zie het als fetch({ next: { revalidate } }), maar dan voor elke asynchrone functie, zoals databasequery's en Redis-aanroepen.

import { unstable_cache } from 'next/cache';

const getProducts = unstable_cache(
  async () => db.products.findMany(),
  ['products-list'],      // cache key parts
  { revalidate: 60, tags: ['products'] } // options
);

// In a Server Component:
const products = await getProducts();

Onderdelen van de cachesleutel

Het tweede argument van unstable_cache is een array met tekenreeksen die samen de cachesleutel vormen. Neem alle variabelen op die de uitvoer beïnvloeden.

const getUserPosts = unstable_cache(
  async (userId: string) => db.posts.findMany({ where: { userId } }),
  ['user-posts'],         // base key
  { tags: [`user-${userId}-posts`] } // per-user tag
);

// Call with userId — Next.js appends the argument to the key:
const posts = await getUserPosts(userId);

Tags voor opnieuw valideren op aanvraag

Voorzie gecachte functies van tags en maak ze met revalidateTag() ongeldig wanneer gegevens veranderen, bijvoorbeeld na een gegevenswijziging in een Server Action.

// Server Action
async function createProduct(data: FormData) {
  'use server';
  await db.products.create({ data: parseFormData(data) });
  revalidateTag('products'); // invalidates all cached functions tagged 'products'
  redirect('/products');
}

Tijdgebaseerd opnieuw valideren

Stel revalidate: N in de options in om de cache na N seconden opnieuw te valideren, vergelijkbaar met ISR voor fetch-aanroepen.

const getStats = unstable_cache(
  async () => computeHeavyStats(),
  ['dashboard-stats'],
  { revalidate: 300 } // recompute at most every 5 minutes
);

cache() en unstable_cache combineren

Gebruik cache() binnen unstable_cache voor functies die vanaf meerdere plaatsen binnen één rendering worden aangeroepen: dubbele aanroepen voorkomen binnen één aanvraag en bewaren tussen aanvragen.

// Deduplicate the DB call within a request:
export const getRawUser = cache(async (id: string) => db.user.findUnique({ where: { id } }));

// And cache the result persistently:
export const getUser = unstable_cache(getRawUser, ['user'], { revalidate: 60, tags: ['user'] });

Beperkingen van unstable_cache

unstable_cache is als instabiel gemarkeerd omdat de API vóór stabilisatie kan veranderen. Gecachte functies hebben geen toegang tot aanvraag-specifieke gegevens, zoals cookies of headers.

React cache() voor lay-outgegevens

Omhul gegevensophaalacties op lay-outniveau met cache(), zodat zowel de lay-out als elke geneste pagina die dezelfde functie aanroept het resultaat binnen één rendering delen.

// lib/data.ts
export const getCurrentUser = cache(async () => {
  const session = await getServerSession();
  return db.user.findUnique({ where: { id: session?.userId } });
});

// layout.tsx and page.tsx both call getCurrentUser() — one DB query

Wanneer gebruik je welke?

cache(): voorkomt identieke aanroepen binnen één rendering, dus binnen dezelfde aanvraag. unstable_cache: bewaart resultaten tussen meerdere aanvragen totdat ze opnieuw zijn gevalideerd. Gebruik fetch met next.revalidate wanneer je externe HTTP-API's aanroept.

Korte controle

Wat is het belangrijkste verschil tussen cache() van React en unstable_cache van Next.js?

Samenvatting

cache(fn) voorkomt dubbele aanroepen binnen één rendering — ideaal voor gedeelde gegevens van lay-out en pagina. unstable_cache(fn, keys, { revalidate, tags }) bewaart resultaten tussen aanvragen en maakt ze op basis van tijd of tags ongeldig — ideaal voor dure databasequery's.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “unstable_cache en React cache()” gratis?

Ja — de volledige tekst van “unstable_cache en React cache()” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “unstable_cache en React cache()”?

Cache dure functieresultaten per request of tussen requests met de cache-hulpmiddelen van Next.js. Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “unstable_cache en React cache()”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. fetch() met cacheopties in Next.js
  2. unstable_cache en React cache()
  3. Incremental Static Regeneration (ISR)
  4. Server Actions voor datamutaties
← Terug naar React Academy