Stop confusing RSC with SSR. Here's the real difference, when to use each, and how I structure my Next.js apps for maximum performance.
Ayush Kumar
Feb 10, 2026 � 9 min read
I've seen developers use 'use client' on every single component 'just to be safe'. I've also seen developers try to use useState in a Server Component and wonder why it breaks. Both are the same problem — a wrong mental model.
“Server Components run on the server and send HTML. Client Components run in the browser and handle interactivity.”
� The rule you actually need
Server-Side Rendering (SSR) renders a component to HTML on each request. React Server Components (RSC) are a different concept — they never become interactive. They render to HTML once and stay HTML. No JavaScript is sent to the browser for them.
'use client' doesn't mean 'this runs only on the client'. It means 'this is the boundary where the client bundle starts'. Everything below it in the tree becomes a Client Component. Everything above it can stay on the server.
// ✅ Server Component — no JS sent to browser
// page.tsx
import { db } from "@/lib/db";
import UserProfile from "./UserProfile"; // Client Component
export default async function Page() {
const user = await db.user.findFirst(); // DB call on server
return <UserProfile user={user} />; // pass data as props
}
// UserProfile.tsx
"use client"; // Only this file + its tree is client-side
import { useState } from "react";
export default function UserProfile({ user }) {
const [editing, setEditing] = useState(false);
// ... interactive logic
}Full Website Themes � Built with Next.js
Restaurant, E-Commerce, SaaS, Portfolio. Full source code. One-time payment from ?699.
// page.tsx — always Server Component
// Fetches data, passes to view
export default async function Page() {
const data = await fetchData();
return <PageView data={data} />;
}
// view.tsx — Client Component
// Handles all interactivity
"use client";
export default function PageView({ data }) {
const [tab, setTab] = useState("all");
// ...
}This pattern — Server Component page.tsx + Client Component view.tsx — is what I use across the entire uidrop.dev codebase. Clean separation, great performance, zero confusion.
All uidrop.dev components and themes follow this exact page.tsx + view.tsx pattern. You get the source code, architecture included. Pro components from ₹69. Full website themes from ₹699.
I'm Ayush, a frontend developer who got tired of rebuilding the same components. So I built uidrop.dev — a library of premium UI designs for developers who want to ship faster.
Feb 22, 2026 � 8 min read
These underused Tailwind utilities will make your interfaces look 10x more polished — gradients, rings, backdrop blur, and more.
Feb 18, 2026 � 6 min read