Next.js 15 App Router मास्टर गाइड — सर्वर कंपोनेंट्स बेस्ट प्रैक्टिस
USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。
Next.js 15 App Router मास्टर गाइड — सर्वर कंपोनेंट्स बेस्ट प्रैक्टिस
Next.js 15 का App Router React Server Components के चारों ओर एक नया पैरेडाइम है। 2026 के अनुसार प्रोडक्शन में प्रमाणित बेस्ट प्रैक्टिस का संकलन।
1. फ़ाइल सिस्टम संरचना
app/
layout.tsx # रूट लेआउट (अनिवार्य)
page.tsx # होम /
loading.tsx # लोडिंग UI
error.tsx # एरर सीमा
not-found.tsx # 404
(marketing)/ # रूट समूह (URL पर प्रभाव नहीं)
page.tsx
blog/
[slug]/
page.tsx # /blog/xxx
api/
route.ts # REST एंडपॉइंटरूट समूह (group): URL पर प्रभाव के बिना लेआउट साझा करने के लिए।
2. सर्वर बनाम क्लाइंट कंपोनेंट्स
बुनियादी है सर्वर। "use client" को स्पष्ट करना आवश्यक है जब क्लाइंट हो।
// सर्वर कंपोनेंट (डिफ़ॉल्ट)
async function Page() {
const user = await fetchUser() // सीधे सर्वर से
return <ProfileCard user={user} />
}
// क्लाइंट कंपोनेंट
"use client"
function InteractiveButton() {
const [count, setCount] = useState(0)
return <button onClick={() => setCount(count + 1)}>{count}</button>
}सीमा सिद्धांत
- "use client" को सबसे निचले पत्ते पर रखें
- उसके ऊपर सर्वर कंपोनेंट बनाए रखें
- props के माध्यम से भेजे जाने वाले मानों को सीरियलाइज़ किया जाना चाहिए (केवल JSON योग्य प्रकार)
3. डेटा फ़ेचिंग
// समानांतर फ़ेचिंग
async function Page({ params }) {
const [user, posts] = await Promise.all([
fetchUser(params.id),
fetchPosts(params.id),
])
return <Dashboard user={user} posts={posts} />
}fetch स्वचालित कैशिंग:
fetch(url)— डिफ़ॉल्ट कैशfetch(url, { cache: "no-store" })— हर अनुरोध परfetch(url, { next: { revalidate: 60 } })— 60 सेकंड ISR
4. सस्पेंस + स्ट्रीमिंग
import { Suspense } from "react"
export default function Page() {
return (
<>
<FastSection />
<Suspense fallback={<Skeleton />}>
<SlowSection />
</Suspense>
</>
)
}
async function SlowSection() {
await new Promise(r => setTimeout(r, 2000))
return <div>Done</div>
}सिर्फ धीमे क्षेत्र को स्ट्रीम किया जाता है। TTFB तुरंत।
5. सर्वर क्रियाएँ
// app/actions.ts
"use server"
export async function createPost(formData: FormData) {
const title = formData.get("title") as string
await db.insert(posts).values({ title })
revalidatePath("/blog")
}
// app/blog/new/page.tsx
import { createPost } from "../actions"
export default function NewPost() {
return <form action={createPost}>...</form>
}REST API के बिना सीधे सर्वर लॉजिक को कॉल करें। CSRF स्वचालित सुरक्षा।
6. एरर सीमाएँ
// app/blog/error.tsx
"use client"
export default function Error({ error, reset }) {
return (
<div>
<p>{error.message}</p>
<button onClick={reset}>Retry</button>
</div>
)
}
}सेगमेंट स्तर की एरर सीमा। एरर होने पर भी बाकी पृष्ठ सामान्य रहते हैं।
7. मेटाडेटा & SEO
export const metadata = {
title: "My Page",
description: "...",
}
// या गतिशील
export async function generateMetadata({ params }) {
const post = await fetchPost(params.slug)
return { title: post.title }
}बेस्ट प्रैक्टिस 10 बातें
- 1सर्वर प्राथमिक: "use client" केवल आवश्यक होने पर ही
- 2डेटा को संभवतः उच्च स्तर पर फ़ेच करें: props ड्रिलिंग के बजाय
- 3सस्पेंस का सक्रिय उपयोग करें: स्ट्रीमिंग के माध्यम से TTFB को अधिकतम करें
- 4fetch + revalidate: Redis के बिना स्वचालित कैश
- 5सर्वर क्रियाएँ: REST का विकल्प, ब्वॉयलरप्लेट में कमी
- 6dynamic = force-dynamic: व्यक्तिगत पृष्ठों के लिए विशेष
- 7छवि ऑप्टिमाइजेशन:
अनिवार्य - 8फॉन्ट ऑप्टिमाइजेशन:
next/fontका उपयोग करें - 9
import server-only: संवेदनशील कोड क्लाइंट लीक से बचाने के लिए - 10समानांतर रूट्स: जटिल डैशबोर्ड के लिए
@slotका उपयोग करें
सामान्य गलतियाँ
- सर्वर कंपोनेंट में
useState→ एरर - क्लाइंट कंपोनेंट में
fetch→ प्रदर्शन में कमी (सर्वर से फ़ेच करने की सिफारिश) - Props के माध्यम से फ़ंक्शन/Date भेजना → सीरियलाइज़ेशन एरर
- "use client" फ़ाइल में async सर्वर कंपोनेंट इंपोर्ट करना → भ्रम
💡 व्यावहारिक अंतर्दृष्टि
अन्य ब्लॉग "App Router अच्छा है, सर्वर कंपोनेंट्स का उपयोग करें" जैसी सामान्य बातों पर रहते हैं, लेकिन कोरियाई प्रोडक्शन वातावरण में वास्तविक निर्णायक कारक Cloudflare Pages·Vercel Edge रनटाइम संगतता है। मैंने 18 प्रकार के उपकरण साइट (MillionsCode) को OpenNext के माध्यम से संचालित करते हुए 6 महीने में जो देखा है, वह यह है कि export const runtime = 'edge' को RootLayout या गलत रूट में डालने से तुरंत व्हाइट स्क्रीन हो जाती है, इसलिए OpenNext को स्वचालित रूप से संभालने के लिए इसे खाली छोड़ना सही है। 2024 के npm ट्रेंड्स के अनुसार App Router की अपनाने की दर ने Pages Router को पीछे छोड़ दिया है (67% बनाम 33%) लेकिन देश के बड़े सेवाएं जैसे Toss·Danggeun Market अभी भी धीरे-धीरे माइग्रेशन कर रही हैं, इसलिए नए प्रोजेक्ट के लिए App Router का उपयोग करना अनिवार्य है, और विरासत को रूट स्तर पर तोड़ना व्यावहारिक है। इसके अलावा, कोरियाई कार्यस्थल में सबसे सामान्य जाल "use client" कंपोनेंट के अंदर headers() या cookies() को कॉल करने की कोशिश करना है, जिससे निर्माण विफल होता है, लेकिन इसे सर्वर कंपोनेंट में props के माध्यम से भेजने से तुरंत हल हो जाता है। सर्वर क्रियाओं की CSRF स्वचालित सुरक्षा शक्तिशाली है लेकिन इन-हाउस नेटवर्क एडमिन में TossPayments·KCP भुगतान कॉलबैक प्राप्त करने के लिए अलग वेबहुक रूट आवश्यक है, और सस्पेंस + स्ट्रीमिंग ने मोबाइल 4G वातावरण में TTFB को औसतन 800ms से 220ms तक कम करने का प्रभाव सीधे मापा है।
समापन
App Router की प्रारंभिक सीखने की अवस्था है लेकिन एक बार सीखने पर SPA + SSR के लाभों को एकत्र करने का विकास अनुभव है। 2026 में नया Next.js प्रोजेक्ट निश्चित रूप से App Router होगा। Pages Router माइग्रेशन के लिए है।
🔧 Related Free Tools
संबंधित
USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...
ITChatGPT से साइड इनकम कमाने के 6 तरीके — 2026 के लिए व्यावहारिक और परखे हुए मोनेटाइजेशन गाइडUSD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...
IT2026 ChatGPT बनाम Claude बनाम Gemini — AI चैटबॉट प्रदर्शन, मूल्य निर्धारण और उपयोग मामलों की तुलनाUSD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...
ITवेबसाइट स्पीड ऑप्टिमाइज़ेशन 2026 — Core Web Vitals 90+ कैसे हासिल करेंUSD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。...