fetch

You can call fetch with async and await directly within Server Components.

fetch(`https://...`, { cache: 'force-cache' | 'no-store' })

auto no cache (default): Next.js fetches the resource from the remote server on every request in development, but will fetch once during next build because the route will be statically prerendered. If Dynamic APIs are detected on the route, Next.js will fetch the resource on every request.

No Cache

Next.js fetches the resource from the remote server on every request, even if Dynamic APIs are not detected on the route.

let data = await fetch('<https://api.vercel.app/blog>', { cache: 'no-store' })

Cache

You can opt individual fetch into caching by setting the cache option to force-cache:

// Opt into caching
fetch(`https://...`, { cache: 'force-cache' })

Next.js looks for a matching request in its Data Cache:

Revalidating

Time-based Revalidation

Revalidate data after a certain amount of time has passed and a new request is made. This is useful for data that changes infrequently and freshness is not as critical.

fetch(`https://...`, { next: { revalidate: false | 0 | number } })

Set the cache lifetime of a resource (in seconds).