How does Next.js data fetching and caching work?
Answer
In the App Router, server-side fetch calls can be memoized and cached according to their options; routes can be static, dynamic, or revalidated. Choose caching deliberately and invalidate or revalidate after mutations rather than assuming fresh data.
Context
Next.js lets a route choose a server-first rendering and caching strategy while preserving React’s component model. Keep client boundaries small and make cache invalidation part of every mutation design.
Example
tsx
// app/products/[id]/page.tsx
export default async function ProductPage({ params }: { params: { id: string } }) {
const product = await getProduct(params.id)
return <h1>{product.name}</h1>
}A Server Component can fetch data close to the route without shipping that data-access code to the browser.
Practical considerations
- Choose the approach from the requirement and constraints, not from habit.
- Include validation, error handling, and cleanup where the boundary requires them.
- Verify the observable result with focused tests or measurement.
Follow-up prompts
- What failure mode would you expect if this were implemented incorrectly?
- How would you test this behaviour?
- What changes when the feature must scale to a larger application or team?
In practice
For this medium-level topic, make assumptions explicit, choose the smallest safe implementation, and verify the behavior at the relevant boundary.