React
Shipping fast with React Server Components
A pragmatic tour of where RSC helps, where it hurts, and how to draw the client boundary without regret.
Mar 18, 20261 min read
The boundary is the architecture
The single most important decision in an RSC app is *where the "use client" line goes*.
Rules of thumb
- Fetch on the server; hydrate only what needs interaction.
- Push client components to the leaves of the tree.
- Pass serializable props across the boundary — no functions, no class instances.
tsx
// Server component
export default async function Page() {
const posts = await getPosts();
return <PostList posts={posts} />; // PostList can be a client island
}Measure First Load JS per route. A shrinking client bundle is the clearest signal you've drawn the boundary well.
#React
#Next.js
#Performance