The Next.js App Router represents a significant shift in how we build React applications. Here's what I've learned from using it in production.
Server Components: A Game Changer
The biggest paradigm shift is Server Components. They've allowed us to:
- Reduce client-side JavaScript
- Improve initial page loads
- Simplify data fetching
Example of a Server Component pattern we use:
async function ProductList() {
const products = await db.products.findMany();
return (
<ul>
{products.map(product => (
<ProductCard
key={product.id}
product={product}
// Client components only where needed
PriceDisplay={ClientPriceDisplay}
/>
))}
</ul>
);
}