Next.js

Next.js 14 et l'App Router : Guide Complet

Océane A.
10 octobre 2024
12 min

Maîtrisez l'App Router de Next.js 14 et découvrez comment créer des applications web modernes et performantes.

📝
Next.js 14 représente une révolution dans le développement web moderne avec l'introduction de l'App Router, les Server Components et des optimisations de performance qui transforment fondamentalement la façon dont nous construisons les applications web.

L'App Router : Une Nouvelle Architecture


L'App Router introduit une architecture basée sur les dossiers qui simplifie le routage et améliore les performances grâce au rendu côté serveur par défaut.

Structure de l'App Router :


app/
├── layout.tsx      # Layout racine
├── page.tsx        # Page d'accueil
├── blog/
│   ├── layout.tsx  # Layout du blog
│   ├── page.tsx    # Liste des articles
│   └── [slug]/
│       └── page.tsx # Article individuel
└── api/
    └── posts/
        └── route.ts # API route

Avantages de l'App Router :


  • Routage basé sur les dossiers : Structure intuitive et prévisible

  • Layouts imbriqués : Réutilisation facile des composants de layout

  • Loading et Error boundaries : Gestion automatique des états de chargement

Server Components : Performance Révolutionnaire


Les Server Components permettent de rendre les composants côté serveur, réduisant drastiquement la taille du bundle JavaScript et améliorant les performances.

Exemple de Server Component :


// Server Component (par défaut dans l'App Router)
async function BlogList() {
  const posts = await fetchPosts();
  
  return (
    <div>
      {posts.map(post => (
        <article key={post.id}>
          <h2>{post.title}</h2>
          <p>{post.excerpt}</p>
        </article>
      ))}
    </div>
  );
}

Client Components :


'use client';

import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <button onClick={() => setCount(count + 1)}>
      Count: {count}
    </button>
  );
}

Optimisations de Performance


Next.js 14 apporte des améliorations significatives de performance grâce à de nouvelles optimisations.

Turbopack : Compilation Ultra-Rapide


# Utilisation de Turbopack
next dev --turbo

Métriques de performance :


  • Compilation 700x plus rapide avec Turbopack

  • Hydration optimisée pour les Server Components

  • Streaming SSR pour un rendu progressif

Streaming et Suspense :


import { Suspense } from 'react';

function Dashboard() {
  return (
    <div>
      <Suspense fallback={<Loading />}>
        <SlowComponent />
      </Suspense>
      <Suspense fallback={<Loading />}>
        <AnotherSlowComponent />
      </Suspense>
    </div>
  );
}

Nouvelles Fonctionnalités


Next.js 14 introduit plusieurs nouvelles fonctionnalités qui améliorent l'expérience de développement.

Partial Prerendering :


// Combinaison de contenu statique et dynamique
function ProductPage({ product }) {
  return (
    <div>
      {/* Contenu statique pré-rendu */}
      <h1>{product.name}</h1>
      <p>{product.description}</p>
      
      {/* Contenu dynamique rendu à la demande */}
      <Suspense fallback={<Loading />}>
        <ProductReviews productId={product.id} />
      </Suspense>
    </div>
  );
}

Metadata API :


// Gestion des métadonnées dans l'App Router
export async function generateMetadata({ params }) {
  const product = await getProduct(params.id);
  
  return {
    title: product.name,
    description: product.description,
    openGraph: {
      images: [product.image],
    },
  };
}

Migration et Adoption


La migration vers Next.js 14 et l'App Router est progressive et bien documentée.

Étapes de migration :


1. Mise à jour de Next.js : npm install next@latest
2. Création de l'App Router : Structure de dossiers app/
3. Migration progressive : Conversion des pages une par une
4. Optimisation : Adoption des Server Components

Exemple de migration :


// Ancien (Pages Router)
// pages/blog/[slug].tsx
export default function BlogPost({ post }) {
  return <article>{post.content}</article>;
}

export async function getStaticProps({ params }) {
  const post = await getPost(params.slug);
  return { props: { post } };
}

// Nouveau (App Router)
// app/blog/[slug]/page.tsx
export default async function BlogPost({ params }) {
  const post = await getPost(params.slug);
  return <article>{post.content}</article>;
}

Impact sur l'Écosystème


Next.js 14 influence l'écosystème React avec de nouvelles patterns et bibliothèques optimisées.

Bibliothèques compatibles :


  • React Query : Intégration native avec les Server Components

  • Prisma : Optimisations pour les requêtes côté serveur

  • Stripe : Support des Server Actions pour les paiements

Conclusion


Next.js 14 représente l'avenir du développement web avec une architecture moderne qui privilégie les performances et l'expérience utilisateur. Les développeurs qui adoptent l'App Router et les Server Components bénéficient d'applications plus rapides et d'une meilleure productivité.

Tags

Next.jsApp RouterServer ComponentsPerformanceReact