📖 سلسلة تعلم React و Next.js | المقال 6
🛤️ Next.js App Router - التوجيه
Next.js يجعل التوجيه سهلاً - كل ملف = صفحة!
📁 نظام الملفات = التوجيه
القاعدة: كل مجلد في
src/app/ = مسار URL
مثال:
src/app/
├── page.tsx → /
├── about/
│ └── page.tsx → /about
├── blog/
│ ├── page.tsx → /blog
│ └── [id]/
│ └── page.tsx → /blog/:id
└── contact/
└── page.tsx → /contact
📄 إنشاء صفحة جديدة
صفحة About:
// src/app/about/page.tsx
export default function AboutPage() {
return (
<div className="p-8">
<h1 className="text-3xl font-bold mb-4">من نحن</h1>
<p>هذه صفحة About...</p>
</div>
);
}
// ✅ الآن: http://localhost:3000/about
🔗 Dynamic Routes - مسارات ديناميكية
صفحة مقال بـ ID:
// src/app/blog/[id]/page.tsx
interface Props {
params: { id: string };
}
export default function BlogPost({ params }: Props) {
return (
<div className="p-8">
<h1>المقال رقم: {params.id}</h1>
</div>
);
}
// ✅ /blog/1 → params.id = "1"
// ✅ /blog/abc → params.id = "abc"
🎨 Layout - القالب المشترك
// src/app/layout.tsx
import Navbar from '@/components/Navbar';
import Footer from '@/components/Footer';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="ar" dir="rtl">
<body>
<Navbar />
<main>
{children}
</main>
<Footer />
</body>
</html>
);
}
🔗 Navigation - التنقل
استخدام Link:
import Link from 'next/link';
export default function Navbar() {
return (
<nav>
<Link href="/">Home</Link>
<Link href="/about">About</Link>
<Link href="/blog/1">Blog</Link>
</nav>
);
}
// ✅ Link = تنقل سريع بدون إعادة تحميل الصفحة
برمجياً:
'use client';
import { useRouter } from 'next/navigation';
export default function LoginForm() {
const router = useRouter();
const handleLogin = async () => {
// ... تسجيل الدخول
// انتقل للصفحة الرئيسية
router.push('/dashboard');
};
return <button onClick={handleLogin}>دخول</button>;
}
⚙️ Loading & Error
صفحة التحميل:
// src/app/dashboard/loading.tsx
export default function Loading() {
return (
<div className="flex justify-center p-8">
<div className="text-xl">جاري التحميل... ⏳</div>
</div>
);
}
صفحة الخطأ:
// src/app/dashboard/error.tsx
'use client';
export default function Error({
error,
reset,
}: {
error: Error;
reset: () => void;
}) {
return (
<div className="p-8 text-center">
<h2>❌ حدث خطأ!</h2>
<button onClick={reset}>حاول مرة أخرى</button>
</div>
);
}
📊 ملخص
| الملف | الوظيفة |
|---|---|
page.tsx | صفحة |
layout.tsx | قالب مشترك |
loading.tsx | تحميل |
error.tsx | خطأ |
[id]/page.tsx | مسار ديناميكي |
📌 تسميات: Next.js App Router تعلم برمجة
✨ ← المقال السابق | المقال التالي: API Routes → ✨
سلسلة تعلم React و Next.js مع Ahmed Issa
ليست هناك تعليقات:
إرسال تعليق