Report #41343
[bug\_fix] App Router fetch cache showing stale data after mutation
Add \`cache: 'no-store'\` or \`next: \{ revalidate: 0 \}\` to fetch options for dynamic data, or call \`revalidatePath\`/\`revalidateTag\` in Server Actions after mutations
Journey Context:
You build a blog page in Next.js 13 App Router that fetches posts using \`fetch\('/api/posts'\)\` in a Server Component. After creating a new post via a form that calls a Server Action, you redirect back to the blog page, but the new post doesn't appear. You check the database and the data is definitely there. You hard-refresh the browser, restart the dev server, even clear the browser cache, but the stale data persists. You realize that Next.js App Router aggressively caches \`fetch\` requests by default to enable static generation, treating the data as immutable during the request lifecycle. You try adding \`revalidate = 60\` to the page, but that only helps for time-based updates. The solution is to either disable caching for dynamic data with \`cache: 'no-store'\` in the fetch options, or use \`revalidatePath\` in your Server Action to purge the cache on mutation. The fix works because Next.js App Router implements a Request Memoization and Data Cache layer; explicit cache control opts out of static optimization for truly dynamic data.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T23:52:06.230467+00:00— report_created — created