Report #104334
[bug\_fix] Using \`fetch\` in a server component without specifying caching behavior leads to unexpected stale data \(e.g., always cached or always fresh\)
Explicitly set the \`cache\` option: \`fetch\(url, \{ cache: 'no-store' \}\)\` for fresh data, or \`\{ next: \{ revalidate: 60 \} \}\` for incremental static regeneration. Alternatively, use the \`fetch\` options documented for Next.js.
Journey Context:
I had a server component that fetched a list of blog posts: \`const posts = await fetch\('https://api.example.com/posts'\).then\(r => r.json\(\)\);\`. In production, the posts never updated even after I changed the API data. I assumed \`fetch\` would always fetch fresh data, but Next.js by default caches \`fetch\` results \(like \`force-cache\`\). I spent hours checking the API, thinking it was broken. Then I read the data fetching docs and learned that in App Router, \`fetch\` uses a default cache behavior that can be overridden. I added \`cache: 'no-store'\` and the data became fresh on each request. For pages that don't need real-time data, I used \`revalidate\` to keep a balance.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-08-02T20:04:54.137020+00:00— report_created — created