Skip to Content
🎉 Utilisez JS efficacement →

🚀 Exercice : Exploration de l’App Router dans Next.js

📌 Objectifs

1ïžâƒŁ CrĂ©er un layout global (layout.tsx) avec un header et un footer.
2ïžâƒŁ Ajouter une page about.tsx pour tester le routing basĂ© sur le systĂšme de fichiers.
3ïžâƒŁ ImplĂ©menter un loading state (loading.tsx) simulant un chargement asynchrone.

🔗 Code source : 📂 GitHub  🚀


1ïžâƒŁ CrĂ©ation du layout.tsx (Structure Globale)

📍 But : DĂ©finir une structure rĂ©utilisable pour toutes les pages avec un header et un footer.

app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="fr"> <body className="flex flex-col min-h-screen"> <header className="bg-blue-600 text-white p-4"> <h1 className="text-xl font-bold">Mon Site Next.js</h1> </header> <main className="flex-1 p-4">{children}</main> <footer className="bg-gray-800 text-white text-center p-4"> © 2025 - Tous droits réservés </footer> </body> </html> ); }

✅ Effet : Toutes les pages auront un header et un footer fixes.


2ïžâƒŁ CrĂ©ation de la page about.tsx

📍 But : Observer le fonctionnement du routing basĂ© sur le systĂšme de fichiers (app/about/page.tsx → /about).

app/about/page.tsx
export default function AboutPage() { return ( <div> <h2 className="text-2xl font-bold">À propos de nous</h2> <p>Bienvenue sur notre site Next.js 13+ !</p> </div> ); }

✅ Effet :

  • En visitant http://localhost:3000/about, la page s’affiche automatiquement sans besoin de configuration supplĂ©mentaire.
  • GrĂące au layout.tsx, elle inclut le header et le footer sans duplication de code.

3ïžâƒŁ Ajout d’un loading.tsx pour simuler un chargement

📍 But : Afficher un Ă©cran de chargement lorsqu’une page met du temps Ă  charger.

app/loading.tsx
export default function Loading() { return ( <div className="flex flex-col items-center justify-center h-screen"> <p className="text-lg font-semibold">Chargement en cours...</p> <div className="animate-spin rounded-full border-t-4 border-blue-500 border-solid h-12 w-12"></div> </div> ); }

✅ Effet :

  • Si une page prend du temps Ă  charger, le loading.tsx s’affiche automatiquement.

4ïžâƒŁ Test avec une page simulant un dĂ©lai (dashboard/page.tsx)

📍 But : VĂ©rifier que loading.tsx s’affiche bien quand une page charge lentement.

app/dashboard/page.tsx
async function fetchData() { await new Promise((resolve) => setTimeout(resolve, 3000)); // Simule un délai de 3s return { message: "Données chargées avec succÚs !" }; } export default async function DashboardPage() { const data = await fetchData(); return ( <div> <h2 className="text-2xl font-bold">Tableau de bord</h2> <p>{data.message}</p> </div> ); }

✅ Effet :
1ïžâƒŁ L’utilisateur visite /dashboard.
2ïžâƒŁ loading.tsx s’affiche pendant 3 secondes.
3ïžâƒŁ Ensuite, la page /dashboard se charge avec les donnĂ©es.


🎯 RĂ©sumĂ© des acquis

✔ CrĂ©ation d’un layout global avec un header et un footer.
✔ Ajout d’une page dynamique en utilisant le systùme de fichiers (app/about/page.tsx).
✔ ImplĂ©mentation d’un Ă©tat de chargement (loading.tsx) pour une meilleure expĂ©rience utilisateur.

mis Ă  jour le