π₯οΈ Next.js 16: Server Components (RSC) Explained
React ne hamesha humein freedom di hai, lekin kabhiβkabhi wahi freedom performance ki dushman ban jati hai. Traditional React apps mein sab kuch browser mein render hota tha, jisse heavy JS bundles aur slow initial load ki problems aati thin. Server Components isi problem ka modern solution hain.
π§ 1. Server Component Kya Hote Hain? (The Zero Level)
Server Component wo component hota hai jo browser mein nahi, balki server par render hota hai.
The Result
Browser ko heavy JavaScript nahi milti β use sirf readyβmade HTML (UI) milta hai.
Default Behavior
Next.js App Router mein har component default taur par Server Component hota hai (jab tak aap explicitly 'use client' na likhein).
π§© Restaurant Analogy
- Server = Chef π¨βπ³ β Kitchen (server) mein raw ingredients ko paka kar dish banata hai
- Browser = Customer π§βπ» β Customer ko sirf final cooked dish (HTML) milti hai
ποΈ 2. The Problem: ClientβSide Rendering (The Old Way)
Traditional React apps mein data fetch karne ke liye humein useEffect aur useState ka use karna padta tha.
"use client";
import { useEffect, useState } from "react";
export default function Page() {
const [data, setData] = useState(null);
useEffect(() => {
fetch("/api/data")
.then(res => res.json())
.then(setData);
}, []);
return <div>{data?.title}</div>;
}β Iske Nuksaan
- Double Wait β Pehle JS load hoti hai, phir API call hoti hai, phir UI dikhta hai
- Waterfall Effect β Nested components mein sequential API calls slow ho jati hain
- Large Bundle Size β Browser ko saara fetching logic download karna padta hai
β 3. The Solution: Server Component Workflow
Next.js Server Components mein hum directly async/await ka use karke data fetch kar sakte hain.
// Default Server Component
export default async function Page() {
const res = await fetch("https://api.example.com/data");
const data = await res.json();
return (
<div>
<h1>{data.title}</h1>
</div>
);
}π Fayde
- Zero ClientβSide JS β Fetching logic browser mein nahi jata
- Faster Data Fetching β Server DB ke paas hota hai β latency kam
- Better Security β API keys / secrets browser tak nahi pahunchte
π 4. Security & Performance Benefits
A. Security (No Leakage)
const res = await fetch(process.env.PRIVATE_API_URL, {
headers: { Authorization: process.env.API_SECRET }
});Ye API_SECRET browser console mein kabhi expose nahi hota.
B. Efficient Streaming
Server Components allow karte hain ki UI ko chunks mein stream kiya ja sake. User ko poore page ka wait nahi karna padta.
β οΈ 5. Server Components ki Limitations
Server Components mein kuch cheezein strictly allowed nahi hoti:
- β
useState() - β
useEffect() - β Browser APIs (
window,document,localStorage) - β Event handlers (
onClick,onChangeetc.)
π±οΈ 6. Client Components Kab Use Karein?
Jahan interactivity ki zarurat ho, wahan Client Component use karein.
- Forms aur Inputs
- Button click events
- Animations (Framer Motion etc.)
- Browserβspecific APIs
"use client";
import { useState } from "react";
export default function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
{count}
</button>
);
}π€ 7. Server + Client Together (Real Power)
Professional apps mein dono ka combination hota hai.
// Page.js (Server Component)
import Counter from "./Counter"; // Client Component
export default async function Page() {
const data = await fetchData();
return (
<div>
<h1>{data.title}</h1>
<Counter />
</div>
);
}π― Summary Mental Model
| Feature | Server Component (RSC) | Client Component |
|---|---|---|
| Default | Yes | No ('use client' required) |
| Data Fetching | Best (Secure & Fast) | Limited (Client latency) |
| Bundle Size | Zero (Stays on server) | Included in JS bundle |
| Interactivity | No | Yes |
| SEO | Excellent | Standard |
Final Rule
Jo kaam server kar sakta hai, use browser par mat bhejo.
Server Components ko data & rendering ke liye rakho aur Client Components ko interaction ke liye.
π Next Video
Client Components & 'use client' β Ye boundary actually kaam kaise karti hai?