Next.js-এ স্কেলেবল এবং ডাইনামিক UI তৈরি করুন। আমাদের গাইড রুট গ্রুপ এবং জটিল ড্যাশবোর্ডের জন্য প্যারালাল রুট কভার করে। এখনই আপনার দক্ষতা বাড়ান!
Next.js অ্যাপ রাউটার আয়ত্ত করা: রুট গ্রুপ এবং প্যারালাল রুট আর্কিটেকচারের গভীরে
Next.js অ্যাপ রাউটারের প্রকাশনাটি এই জনপ্রিয় রিয়্যাক্ট ফ্রেমওয়ার্ক দিয়ে ওয়েব অ্যাপ্লিকেশন তৈরির পদ্ধতিতে একটি যুগান্তকারী পরিবর্তন এনেছে। পেজেস রাউটারের ফাইল-ভিত্তিক প্রথা থেকে সরে এসে, অ্যাপ রাউটার একটি আরও শক্তিশালী, নমনীয় এবং সার্ভার-কেন্দ্রিক মডেল চালু করেছে। এই বিবর্তন আমাদের আরও বেশি নিয়ন্ত্রণ এবং সংগঠনের সাথে অত্যন্ত জটিল এবং পারফরম্যান্ট ইউজার ইন্টারফেস তৈরি করতে সক্ষম করে। এর মধ্যে প্রবর্তিত সবচেয়ে যুগান্তকারী বৈশিষ্ট্যগুলো হলো রুট গ্রুপস এবং প্যারালাল রুটস।
যেসব ডেভেলপার এন্টারপ্রাইজ-গ্রেড অ্যাপ্লিকেশন তৈরি করতে চান, তাদের জন্য এই দুটি ধারণা আয়ত্ত করা কেবল উপকারীই নয়—অপরিহার্য। এগুলো লেআউট ম্যানেজমেন্ট, রুট অর্গানাইজেশন এবং ড্যাশবোর্ডের মতো ডাইনামিক, মাল্টি-প্যানেল ইন্টারফেস তৈরির সাধারণ আর্কিটেকচারাল চ্যালেঞ্জগুলো সমাধান করে। এই গাইডটি বিশ্বব্যাপী ডেভেলপারদের জন্য রুট গ্রুপস এবং প্যারালাল রুটসের একটি বিশদ আলোচনা প্রদান করে, যেখানে মৌলিক ধারণা থেকে শুরু করে উন্নত বাস্তবায়ন কৌশল এবং সেরা অনুশীলনগুলো তুলে ধরা হয়েছে।
Next.js অ্যাপ রাউটার বোঝা: একটি দ্রুত পুনরালোচনা
আমরা বিস্তারিত আলোচনার আগে, অ্যাপ রাউটারের মূল নীতিগুলো সংক্ষেপে জেনে নেওয়া যাক। এর আর্কিটেকচারটি একটি ডিরেক্টরি-ভিত্তিক সিস্টেমের উপর নির্মিত যেখানে ফোল্ডারগুলো URL সেগমেন্ট নির্ধারণ করে। এই ফোল্ডারগুলোর মধ্যে থাকা বিশেষ ফাইলগুলো সেই সেগমেন্টের UI এবং আচরণ নির্ধারণ করে:
page.js
: একটি রুটের জন্য প্রধান UI কম্পোনেন্ট, যা এটিকে সর্বজনীনভাবে অ্যাক্সেসযোগ্য করে তোলে।layout.js
: একটি UI কম্পোনেন্ট যা চাইল্ড লেআউট বা পেজকে র্যাপ করে। এটি হেডার এবং ফুটারের মতো একাধিক রুটে UI শেয়ার করার জন্য অত্যন্ত গুরুত্বপূর্ণ।loading.js
: পেজের কন্টেন্ট লোড হওয়ার সময় দেখানোর জন্য একটি ঐচ্ছিক UI, যা React Suspense-এর উপর ভিত্তি করে তৈরি।error.js
: ত্রুটির ক্ষেত্রে দেখানোর জন্য একটি ঐচ্ছিক UI, যা শক্তিশালী এরর বাউন্ডারি তৈরি করে।
এই কাঠামো, রিয়্যাক্ট সার্ভার কম্পোনেন্টস (RSCs) এর ডিফল্ট ব্যবহারের সাথে মিলিত হয়ে, একটি সার্ভার-ফার্স্ট অ্যাপ্রোচকে উৎসাহিত করে যা পারফরম্যান্স এবং ডেটা-ফেচিং প্যাটার্নকে উল্লেখযোগ্যভাবে উন্নত করতে পারে। রুট গ্রুপস এবং প্যারালাল রুটস হলো উন্নত প্রথা যা এই ভিত্তির উপর নির্মিত।
রুট গ্রুপসের রহস্যভেদ: আপনার প্রজেক্টকে সুস্থ এবং স্কেলেবল করার জন্য সংগঠিত করা
একটি অ্যাপ্লিকেশন বড় হওয়ার সাথে সাথে রুটের সংখ্যা নিয়ন্ত্রণহীন হয়ে পড়তে পারে। আপনার হয়তো মার্কেটিং-এর জন্য কিছু পেজ, ব্যবহারকারী প্রমাণীকরণের জন্য অন্য একটি সেট, এবং মূল অ্যাপ্লিকেশন ড্যাশবোর্ডের জন্য তৃতীয় একটি সেট থাকতে পারে। যৌক্তিকভাবে, এগুলো আলাদা বিভাগ, কিন্তু আপনি কীভাবে আপনার URL কাঠামোকে জটিল না করে ফাইল সিস্টেমে এগুলোকে সংগঠিত করবেন? রুট গ্রুপস ঠিক এই সমস্যারই সমাধান করে।
রুট গ্রুপস কী?
রুট গ্রুপ হলো একটি কৌশল যা আপনার ফাইল এবং রুট সেগমেন্টগুলোকে যৌক্তিক গ্রুপে সংগঠিত করে URL কাঠামোকে প্রভাবিত না করে। আপনি একটি ফোল্ডারের নামকে প্রথম বন্ধনীর মধ্যে মুড়ে একটি রুট গ্রুপ তৈরি করতে পারেন, যেমন, (marketing)
বা (app)
।
বন্ধনীর মধ্যে থাকা ফোল্ডারের নামটি শুধুমাত্র সাংগঠনিক উদ্দেশ্যে ব্যবহৃত হয়। Next.js URL পাথ নির্ধারণ করার সময় এটিকে সম্পূর্ণ উপেক্ষা করে। উদাহরণস্বরূপ, app/(marketing)/about/page.js
-এ থাকা ফাইলটি /about
URL-এ পরিবেশন করা হবে, /(marketing)/about
-এ নয়।
রুট গ্রুপসের মূল ব্যবহার এবং সুবিধা
যদিও সাধারণ সংগঠন একটি সুবিধা, রুট গ্রুপসের আসল শক্তি হলো অ্যাপ্লিকেশনকে আলাদা, শেয়ার্ড লেআউটসহ বিভিন্ন বিভাগে ভাগ করার ক্ষমতা।
১. রুট সেগমেন্টের জন্য বিভিন্ন লেআউট তৈরি করা
এটি সবচেয়ে সাধারণ এবং শক্তিশালী ব্যবহারের ক্ষেত্র। একটি ওয়েব অ্যাপ্লিকেশন কল্পনা করুন যার দুটি প্রধান বিভাগ রয়েছে:
- একটি পাবলিক-ফেসিং মার্কেটিং সাইট (হোম, অ্যাবাউট, প্রাইসিং) যার একটি গ্লোবাল হেডার এবং ফুটার রয়েছে।
- একটি ব্যক্তিগত, প্রমাণীকৃত ব্যবহারকারী ড্যাশবোর্ড (ড্যাশবোর্ড, সেটিংস, প্রোফাইল) যার একটি সাইডবার, ব্যবহারকারী-নির্দিষ্ট নেভিগেশন এবং একটি ভিন্ন সামগ্রিক কাঠামো রয়েছে।
রুট গ্রুপস ছাড়া, এই বিভাগগুলিতে বিভিন্ন রুট লেআউট প্রয়োগ করা জটিল হতো। রুট গ্রুপস দিয়ে, এটি অবিশ্বাস্যভাবে সহজ। আপনি প্রতিটি গ্রুপের ভিতরে একটি অনন্য layout.js
ফাইল তৈরি করতে পারেন।
এই পরিস্থিতির জন্য একটি সাধারণ ফাইল কাঠামো নিচে দেওয়া হলো:
app/
├── (marketing)/
│ ├── layout.js // মার্কেটিং হেডার/ফুটার সহ পাবলিক লেআউট
│ ├── page.js // '/' এ রেন্ডার হয়
│ └── about/
│ └── page.js // '/about' এ রেন্ডার হয়
├── (app)/
│ ├── layout.js // সাইডবার সহ ড্যাশবোর্ড লেআউট
│ ├── dashboard/
│ │ └── page.js // '/dashboard' এ রেন্ডার হয়
│ └── settings/
│ └── page.js // '/settings' এ রেন্ডার হয়
└── layout.js // রুট লেআউট (যেমন, <html> এবং <body> ট্যাগের জন্য)
এই আর্কিটেকচারে:
(marketing)
গ্রুপের ভিতরের যেকোনো রুট(marketing)/layout.js
দ্বারা র্যাপ করা হবে।(app)
গ্রুপের ভিতরের যেকোনো রুট(app)/layout.js
দ্বারা র্যাপ করা হবে।- উভয় গ্রুপই রুট
app/layout.js
শেয়ার করে, যা গ্লোবাল HTML কাঠামো সংজ্ঞায়িত করার জন্য উপযুক্ত।
২. একটি সেগমেন্টকে শেয়ার্ড লেআউট থেকে বাদ দেওয়া
কখনো কখনো, একটি নির্দিষ্ট পেজ বা বিভাগকে প্যারেন্ট লেআউট থেকে সম্পূর্ণরূপে মুক্ত করার প্রয়োজন হয়। একটি সাধারণ উদাহরণ হলো চেকআউট প্রক্রিয়া বা একটি বিশেষ ল্যান্ডিং পেজ যেখানে মূল সাইটের নেভিগেশন থাকা উচিত নয়। আপনি রুটটিকে এমন একটি গ্রুপে রেখে এটি অর্জন করতে পারেন যা উচ্চ-স্তরের লেআউট শেয়ার করে না। যদিও এটি জটিল শোনায়, এর মানে হলো একটি রুট গ্রুপকে তার নিজস্ব টপ-লেভেল layout.js
দেওয়া যা রুট লেআউট থেকে `children` রেন্ডার করে না।
বাস্তব উদাহরণ: একটি মাল্টি-লেআউট অ্যাপ্লিকেশন তৈরি করা
চলুন উপরে বর্ণিত মার্কেটিং/অ্যাপ কাঠামোর একটি সংক্ষিপ্ত সংস্করণ তৈরি করি।
১. রুট লেআউট (app/layout.js
)
এই লেআউটটি খুবই সাধারণ এবং প্রতিটি পেজে প্রযোজ্য। এটি অপরিহার্য HTML কাঠামো নির্ধারণ করে।
// app/layout.js
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
২. মার্কেটিং লেআউট (app/(marketing)/layout.js
)
এই লেআউটে একটি পাবলিক-ফেসিং হেডার এবং ফুটার অন্তর্ভুক্ত রয়েছে।
// app/(marketing)/layout.js
export default function MarketingLayout({ children }) {
return (
<div>
<header>Marketing Header</header>
<main>{children}</main>
<footer>Marketing Footer</footer>
</div>
);
}
৩. অ্যাপ ড্যাশবোর্ড লেআউট (app/(app)/layout.js
)
এই লেআউটের একটি ভিন্ন কাঠামো রয়েছে, যেখানে প্রমাণীকৃত ব্যবহারকারীদের জন্য একটি সাইডবার রয়েছে।
// app/(app)/layout.js
export default function AppLayout({ children }) {
return (
<div style={{ display: 'flex' }}>
<aside style={{ width: '200px', borderRight: '1px solid #ccc' }}>
Dashboard Sidebar
</aside>
<main style={{ flex: 1, padding: '20px' }}>{children}</main>
</div>
);
}
এই কাঠামোর সাথে, /about
-এ নেভিগেট করলে পেজটি `MarketingLayout` দিয়ে রেন্ডার হবে, যখন /dashboard
-এ নেভিগেট করলে এটি `AppLayout` দিয়ে রেন্ডার হবে। URL পরিষ্কার এবং অর্থপূর্ণ থাকে, এবং আমাদের প্রজেক্টের ফাইল কাঠামো পুরোপুরি সংগঠিত এবং স্কেলেবল হয়।
প্যারালাল রুটস দিয়ে ডাইনামিক UI আনলক করা
যেখানে রুট গ্রুপস একটি অ্যাপ্লিকেশনের বিভিন্ন বিভাগ সংগঠিত করতে সাহায্য করে, সেখানে প্যারালাল রুটস একটি ভিন্ন চ্যালেঞ্জ মোকাবেলা করে: একটি একক লেআউটের মধ্যে একাধিক, স্বাধীন পেজ ভিউ প্রদর্শন করা। এটি জটিল ড্যাশবোর্ড, সোশ্যাল মিডিয়া ফিড বা যেকোনো UI-এর জন্য একটি সাধারণ প্রয়োজনীয়তা যেখানে বিভিন্ন প্যানেলকে একযোগে রেন্ডার এবং পরিচালনা করতে হয়।
প্যারালাল রুটস কী?
প্যারালাল রুটস আপনাকে একই লেআউটের মধ্যে এক বা একাধিক পেজ একই সাথে রেন্ডার করার অনুমতি দেয়। এই রুটগুলো স্লট নামক একটি বিশেষ ফোল্ডার কনভেনশন ব্যবহার করে সংজ্ঞায়িত করা হয়। স্লটগুলো @folderName
সিনট্যাক্স ব্যবহার করে তৈরি করা হয়। এগুলো URL কাঠামোর অংশ নয়; পরিবর্তে, এগুলো স্বয়ংক্রিয়ভাবে নিকটতম শেয়ার্ড প্যারেন্ট `layout.js` ফাইলে প্রপস হিসাবে পাস করা হয়।
উদাহরণস্বরূপ, যদি আপনার একটি লেআউট থাকে যেখানে একটি টিম অ্যাক্টিভিটি ফিড এবং একটি অ্যানালিটিক্স চার্ট পাশাপাশি প্রদর্শন করার প্রয়োজন হয়, তবে আপনি দুটি স্লট সংজ্ঞায়িত করতে পারেন: `@team` এবং `@analytics`।
মূল ধারণা: স্লটস
স্লটগুলোকে আপনার লেআউটের মধ্যে নামযুক্ত স্থানধারক হিসেবে ভাবুন। লেআউট ফাইলটি স্পষ্টভাবে এই স্লটগুলোকে প্রপস হিসাবে গ্রহণ করে এবং কোথায় রেন্ডার করতে হবে তা নির্ধারণ করে।
এই লেআউট কম্পোনেন্টটি বিবেচনা করুন:
// একটি লেআউট যা দুটি স্লট গ্রহণ করে: 'team' এবং 'analytics'
export default function DashboardLayout({ children, team, analytics }) {
return (
<div>
{children}
<div style={{ display: 'flex' }}>
{team}
{analytics}
</div>
</div>
);
}
এখানে, `children`, `team`, এবং `analytics` সবগুলোই স্লট। `children` একটি অন্তর্নিহিত স্লট যা ডিরেক্টরিতে থাকা স্ট্যান্ডার্ড `page.js`-এর সাথে সঙ্গতিপূর্ণ। `team` এবং `analytics` হলো সুস্পষ্ট স্লট যা ফাইল সিস্টেমে `@` উপসর্গ দিয়ে তৈরি করতে হবে।
মূল বৈশিষ্ট্য এবং সুবিধা
- স্বাধীন রুট হ্যান্ডলিং: প্রতিটি প্যারালাল রুটের (স্লট) নিজস্ব লোডিং এবং এরর স্টেট থাকতে পারে। এর মানে হলো আপনার অ্যানালিটিক্স প্যানেলটি একটি লোডিং স্পিনার দেখাতে পারে যখন টিম ফিড ইতিমধ্যে রেন্ডার হয়ে গেছে, যা একটি অনেক ভালো ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।
- শর্তাধীন রেন্ডারিং: আপনি ব্যবহারকারীর প্রমাণীকরণের অবস্থা বা অনুমতির মতো কিছু শর্তের উপর ভিত্তি করে কোন স্লটগুলো রেন্ডার করবেন তা প্রোগ্রাম্যাটিকভাবে নির্ধারণ করতে পারেন।
- সাব-নেভিগেশন: প্রতিটি স্লট অন্য স্লটগুলোকে প্রভাবিত না করে স্বাধীনভাবে নেভিগেট করা যায়। এটি ট্যাবড ইন্টারফেস বা ড্যাশবোর্ডের জন্য উপযুক্ত যেখানে একটি প্যানেলের অবস্থা অন্যটির থেকে সম্পূর্ণ আলাদা।
একটি বাস্তব-বিশ্বের পরিস্থিতি: একটি জটিল ড্যাশবোর্ড তৈরি করা
আসুন /dashboard
URL-এ একটি ড্যাশবোর্ড ডিজাইন করি। এতে একটি প্রধান কন্টেন্ট এলাকা, একটি টিম অ্যাক্টিভিটি প্যানেল এবং একটি পারফরম্যান্স অ্যানালিটিক্স প্যানেল থাকবে।
ফাইল কাঠামো:
app/
└── dashboard/
├── @analytics/
│ ├── page.js // অ্যানালিটিক্স স্লটের জন্য UI
│ └── loading.js // বিশেষ করে অ্যানালিটিক্সের জন্য লোডিং UI
├── @team/
│ └── page.js // টিম স্লটের জন্য UI
├── layout.js // যে লেআউট স্লটগুলোকে অর্কেস্ট্রেট করে
└── page.js // অন্তর্নিহিত 'children' স্লট (প্রধান কন্টেন্ট)
১. ড্যাশবোর্ড লেআউট (app/dashboard/layout.js
)
এই লেআউটটি তিনটি স্লট গ্রহণ করে এবং সাজায়।
// app/dashboard/layout.js
export default function DashboardLayout({ children, analytics, team }) {
const isLoggedIn = true; // আসল প্রমাণীকরণ লজিক দিয়ে প্রতিস্থাপন করুন
return isLoggedIn ? (
<div>
<h1>Main Dashboard</h1>
{children}
<div style={{ marginTop: '20px', display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '20px' }}>
<div style={{ border: '1px solid blue', padding: '10px' }}>
<h2>Team Activity</h2>
{team}
</div>
<div style={{ border: '1px solid green', padding: '10px' }}>
<h2>Performance Analytics</h2>
{analytics}
</div>
</div>
</div>
) : (
<div>Please log in to view the dashboard.</div>
);
}
২. স্লট পেজ (যেমন, app/dashboard/@analytics/page.js
)
প্রতিটি স্লটের `page.js` ফাইলে সেই নির্দিষ্ট প্যানেলের UI থাকে।
// app/dashboard/@analytics/page.js
async function getAnalyticsData() {
// একটি নেটওয়ার্ক অনুরোধ সিমুলেট করুন
await new Promise(resolve => setTimeout(resolve, 3000));
return { views: '1.2M', revenue: '$50,000' };
}
export default async function AnalyticsPage() {
const data = await getAnalyticsData();
return (
<div>
<p>Page Views: {data.views}</p>
<p>Revenue: {data.revenue}</p>
</div>
);
}
// app/dashboard/@analytics/loading.js
export default function Loading() {
return <p>Loading analytics data...</p>;
}
এই সেটআপের সাথে, যখন একজন ব্যবহারকারী /dashboard
-এ নেভিগেট করে, Next.js `DashboardLayout` রেন্ডার করবে। লেআউটটি dashboard/page.js
, dashboard/@team/page.js
, এবং dashboard/@analytics/page.js
থেকে রেন্ডার করা কন্টেন্টকে প্রপস হিসেবে গ্রহণ করবে এবং সে অনুযায়ী তাদের স্থাপন করবে। গুরুত্বপূর্ণভাবে, অ্যানালিটিক্স প্যানেলটি ড্যাশবোর্ডের বাকি অংশের রেন্ডারিং ব্লক না করে ৩ সেকেন্ডের জন্য তার নিজস্ব `loading.js` স্টেট দেখাবে।
`default.js` দিয়ে অমিল রুট হ্যান্ডলিং
একটি গুরুত্বপূর্ণ প্রশ্ন দেখা দেয়: যদি Next.js বর্তমান URL-এর জন্য একটি স্লটের সক্রিয় অবস্থা পুনরুদ্ধার করতে না পারে তবে কী হবে? উদাহরণস্বরূপ, একটি প্রাথমিক লোড বা একটি পেজ রিলোডের সময়, URLটি /dashboard
হতে পারে, যা @team
বা @analytics
স্লটের ভিতরে কী দেখাতে হবে তার জন্য নির্দিষ্ট নির্দেশনা দেয় না। ডিফল্টরূপে, Next.js একটি 404 এরর রেন্ডার করবে।
এটি প্রতিরোধ করতে, আমরা প্যারালাল রুটের ভিতরে একটি default.js
ফাইল তৈরি করে একটি ফলব্যাক UI প্রদান করতে পারি।
উদাহরণ:
// app/dashboard/@analytics/default.js
export default function DefaultAnalyticsPage() {
return (
<div>
<p>No analytics data selected.</p>
</div>
);
}
এখন, যদি অ্যানালিটিক্স স্লটটি অমিল থাকে, Next.js একটি 404 পেজের পরিবর্তে `default.js`-এর কন্টেন্ট রেন্ডার করবে। এটি একটি মসৃণ ব্যবহারকারীর অভিজ্ঞতা তৈরির জন্য অপরিহার্য, বিশেষ করে একটি জটিল প্যারালাল রুট সেটআপের প্রাথমিক লোডের সময়।
উন্নত আর্কিটেকচারের জন্য রুট গ্রুপ এবং প্যারালাল রুট একত্রিত করা
অ্যাপ রাউটারের আসল শক্তি উপলব্ধি করা যায় যখন আপনি এর বৈশিষ্ট্যগুলো একত্রিত করেন। রুট গ্রুপ এবং প্যারালাল রুট sofisticated এবং অত্যন্ত সংগঠিত অ্যাপ্লিকেশন আর্কিটেকচার তৈরি করতে সুন্দরভাবে একসাথে কাজ করে।
ব্যবহারের ক্ষেত্র: একটি মাল্টি-মোডাল কন্টেন্ট ভিউয়ার
একটি মিডিয়া গ্যালারি বা ডকুমেন্ট ভিউয়ারের মতো একটি প্ল্যাটফর্ম কল্পনা করুন যেখানে ব্যবহারকারী একটি আইটেম দেখতে পারে এবং ব্যাকগ্রাউন্ড পেজের কনটেক্সট না হারিয়ে এর বিবরণ দেখতে একটি মোডাল উইন্ডো খুলতে পারে। এটিকে প্রায়শই "ইন্টারসেপ্টিং রুট" বলা হয় এবং এটি প্যারালাল রুটের উপর নির্মিত একটি শক্তিশালী প্যাটার্ন।
আসুন একটি ফটো গ্যালারি তৈরি করি। যখন আপনি একটি ফটোতে ক্লিক করেন, এটি একটি মোডালে খোলে। কিন্তু যদি আপনি পেজটি রিফ্রেশ করেন বা সরাসরি ফটোর URL-এ নেভিগেট করেন, তবে এটি সেই ফটোর জন্য একটি ডেডিকেটেড পেজ দেখানো উচিত।
ফাইল কাঠামো:
app/
├── @modal/(..)(..)photos/[id]/page.js // মোডালের জন্য ইন্টারসেপ্ট করা রুট
├── photos/
│ └── [id]/
│ └── page.js // ডেডিকেটেড ফটো পেজ
├── layout.js // রুট লেআউট যা @modal স্লট গ্রহণ করে
└── page.js // প্রধান গ্যালারি পেজ
ব্যাখ্যা:
- আমরা `@modal` নামে একটি প্যারালাল রুট স্লট তৈরি করি।
- অদ্ভুত দেখতে পাথ
(..)(..)photos/[id]
"ক্যাচ-অল সেগমেন্ট" নামক একটি কনভেনশন ব্যবহার করে দুই স্তর উপর থেকে (রুট থেকে)photos/[id]
রুটকে ম্যাচ করার জন্য। - যখন একজন ব্যবহারকারী প্রধান গ্যালারি পেজ (
/
) থেকে একটি ফটোতে নেভিগেট করে, Next.js এই নেভিগেশনটি ইন্টারসেপ্ট করে এবং একটি সম্পূর্ণ পেজ নেভিগেশনের পরিবর্তে `@modal` স্লটের ভিতরে মোডালের পেজ রেন্ডার করে। - প্রধান গ্যালারি পেজটি লেআউটের `children` প্রপে দৃশ্যমান থাকে।
- যদি ব্যবহারকারী সরাসরি
/photos/123
-এ যায়, ইন্টারসেপ্টটি ট্রিগার হয় না, এবংphotos/[id]/page.js
-এ থাকা ডেডিকেটেড পেজটি স্বাভাবিকভাবে রেন্ডার হয়।
এই প্যাটার্নটি প্যারালাল রুট (`@modal` স্লট) এবং উন্নত রাউটিং কনভেনশনগুলিকে একত্রিত করে একটি নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতা তৈরি করে যা ম্যানুয়ালি বাস্তবায়ন করা খুব জটিল হতো।
সেরা অনুশীলন এবং সাধারণ ভুল
রুট গ্রুপসের সেরা অনুশীলন
- বর্ণনামূলক নাম ব্যবহার করুন: আপনার প্রজেক্ট কাঠামোকে স্ব-ব্যাখ্যামূলক করতে
(auth)
,(marketing)
, বা(protected)
এর মতো অর্থপূর্ণ নাম বেছে নিন। - যতটা সম্ভব ফ্ল্যাট রাখুন: রুট গ্রুপগুলির অতিরিক্ত নেস্টিং এড়িয়ে চলুন। একটি ফ্ল্যাট কাঠামো সাধারণত বোঝা এবং রক্ষণাবেক্ষণ করা সহজ।
- এর উদ্দেশ্য মনে রাখবেন: এগুলিকে লেআউট বিভাজন এবং সংগঠনের জন্য ব্যবহার করুন, URL সেগমেন্ট তৈরি করার জন্য নয়।
প্যারালাল রুটসের সেরা অনুশীলন
- সর্বদা একটি `default.js` প্রদান করুন: প্যারালাল রুটগুলির যেকোনো নন-ট্রিভিয়াল ব্যবহারের জন্য, প্রাথমিক লোড এবং অমিল অবস্থা সুন্দরভাবে পরিচালনা করতে একটি `default.js` ফাইল অন্তর্ভুক্ত করুন।
- গ্রানুলার লোডিং স্টেট ব্যবহার করুন: ব্যবহারকারীকে তাত্ক্ষণিক প্রতিক্রিয়া প্রদান করতে এবং UI ওয়াটারফল প্রতিরোধ করতে প্রতিটি স্লটের ডিরেক্টরির ভিতরে একটি `loading.js` ফাইল রাখুন।
- স্বাধীন UI-এর জন্য ব্যবহার করুন: প্যারালাল রুটগুলি তখন উজ্জ্বল হয় যখন প্রতিটি স্লটের বিষয়বস্তু সত্যিই স্বাধীন হয়। যদি প্যানেলগুলি গভীরভাবে আন্তঃসংযুক্ত হয়, তবে একটি একক কম্পোনেন্ট ট্রি এর মাধ্যমে প্রপস পাস করা একটি সহজ সমাধান হতে পারে।
এড়িয়ে চলার মতো সাধারণ ভুল
- কনভেনশন ভুলে যাওয়া: একটি সাধারণ ভুল হলো রুট গ্রুপগুলির জন্য প্রথম বন্ধনী `()` বা প্যারালাল রুট স্লটগুলির জন্য অ্যাট-প্রতীক `@` ভুলে যাওয়া। এটি এগুলিকে সাধারণ URL সেগমেন্ট হিসাবে বিবেচনা করতে বাধ্য করবে।
- `default.js` অনুপস্থিত থাকা: প্যারালাল রুটগুলির সাথে সবচেয়ে ঘন ঘন সমস্যা হলো অপ্রত্যাশিত 404 এরর দেখা কারণ অমিল স্লটগুলির জন্য একটি ফলব্যাক `default.js` প্রদান করা হয়নি।
- `children`-কে ভুল বোঝা: প্যারালাল রুট ব্যবহার করে একটি লেআউটে, মনে রাখবেন যে `children` শুধুমাত্র একটি স্লট, যা একই ডিরেক্টরিতে থাকা `page.js` বা নেস্টেড লেআউটে অন্তর্নিহিতভাবে ম্যাপ করা হয়।
উপসংহার: ওয়েব অ্যাপ্লিকেশনগুলির ভবিষ্যৎ নির্মাণ
Next.js অ্যাপ রাউটার, রুট গ্রুপস এবং প্যারালাল রুটসের মতো বৈশিষ্ট্য সহ, আধুনিক ওয়েব ডেভেলপমেন্টের জন্য একটি শক্তিশালী এবং স্কেলেবল ভিত্তি প্রদান করে। রুট গ্রুপস কোড সংগঠিত করার এবং URL সেমান্টিক্সে আপস না করে স্বতন্ত্র লেআউট প্রয়োগ করার জন্য একটি মার্জিত সমাধান সরবরাহ করে। প্যারালাল রুটস স্বাধীন স্টেটসহ ডাইনামিক, মাল্টি-প্যানেল ইন্টারফেস তৈরির ক্ষমতা আনলক করে, যা আগে কেবল জটিল ক্লায়েন্ট-সাইড স্টেট ম্যানেজমেন্টের মাধ্যমে অর্জন করা সম্ভব ছিল।
এই শক্তিশালী আর্কিটেকচারাল প্যাটার্নগুলি বোঝা এবং একত্রিত করার মাধ্যমে, আপনি সাধারণ ওয়েবসাইটগুলির বাইরে গিয়ে sofisticated, পারফরম্যান্ট এবং রক্ষণাবেক্ষণযোগ্য অ্যাপ্লিকেশন তৈরি করা শুরু করতে পারেন যা আজকের ব্যবহারকারীদের চাহিদা পূরণ করে। শেখার বক্ররেখাটি ক্লাসিক পেজেস রাউটারের চেয়ে খাড়া হতে পারে, তবে অ্যাপ্লিকেশন আর্কিটেকচার এবং ব্যবহারকারীর অভিজ্ঞতার ক্ষেত্রে এর প্রতিদান বিশাল। আপনার পরবর্তী প্রজেক্টে এই ধারণাগুলি নিয়ে পরীক্ষা শুরু করুন এবং Next.js-এর সম্পূর্ণ সম্ভাবনা আনলক করুন।