Skip to Content
🎉 Utilisez JS efficacement →

🚀 Server Components vs Client Components dans Next.js

Avec l’introduction du App Router (app/), Next.js 13+ repose sur une architecture hybride basĂ©e sur Server Components et Client Components. Cette approche optimise le rendu, amĂ©liore les performances et rĂ©duit la quantitĂ© de JavaScript envoyĂ©e au client.


1ïžâƒŁ Qu’est-ce qu’un Server Component ?

📌 Les Server Components (par dĂ©faut) sont rendus cĂŽtĂ© serveur et envoyĂ©s sous forme de HTML au navigateur.
📌 ✅ Avantages :

  • Aucun JavaScript cĂŽtĂ© client → amĂ©liore la performance.
  • AccĂšs direct aux bases de donnĂ©es et API → sans exposer de code sensible.
  • OptimisĂ© pour le streaming → le rendu peut ĂȘtre progressif.

📍 Exemple de Server Component (par dĂ©faut)

app/page.tsx
async function getData() { const res = await fetch("https://jsonplaceholder.typicode.com/posts/1"); const data = await res.json(); return data; } export default async function Home() { const post = await getData(); return ( <div> <h1>{post.title}</h1> <p>{post.body}</p> </div> ); }

✅ Ce composant est exĂ©cutĂ© uniquement sur le serveur et le client ne charge aucun JavaScript pour afficher le contenu.


2ïžâƒŁ Qu’est-ce qu’un Client Component ? ('use client')

📌 Un Client Component est un composant React classique qui s’exĂ©cute dans le navigateur.
📌 ⚡ NĂ©cessaire si :

  • Le composant utilise un state (useState) ou un effet (useEffect).
  • Il y a des interactions utilisateur (clicks, formulaires
).
  • Il utilise des events handlers (onClick, onChange, etc.).

📍 Exemple de Client Component

app/components/Counter.tsx
"use client"; // Obligatoire pour un Client Component import { useState } from "react"; export default function Counter() { const [count, setCount] = useState(0); return ( <div> <p>Compteur : {count}</p> <button onClick={() => setCount(count + 1)}>Incrémenter</button> </div> ); }

✅ Ce composant fonctionne uniquement cĂŽtĂ© client et peut ĂȘtre utilisĂ© dans un Server Component.


3ïžâƒŁ Comment mĂ©langer Server et Client Components ?

📌 On peut insĂ©rer un Client Component dans un Server Component, mais pas l’inverse !

📍 Exemple : Un Server Component qui intùgre un Client Component

app/page.tsx
import Counter from "./components/Counter"; // Client Component export default function Home() { return ( <div> <h1>Bienvenue</h1> <Counter /> </div> ); }

✅ Seul Counter.tsx est chargĂ© cĂŽtĂ© client, tout le reste est statique et optimisĂ© par Next.js.


4ïžâƒŁ DiffĂ©rences entre Server et Client Components

⚡ CritĂšre🌍 Server Components (par dĂ©faut)đŸ–„ Client Components (use client)
Exécuté surServeurNavigateur
Envoi du JS au client ?❌ Non✅ Oui
Peut utiliser useState et useEffect ?❌ Non✅ Oui
Peut appeler directement une base de donnĂ©es ?✅ Oui❌ Non
Peut contenir des events (onClick, onChange) ?❌ Non✅ Oui
Rendu optimisĂ©âœ… Oui (SSR & streaming)❌ Non (hydration cĂŽtĂ© client)

5ïžâƒŁ Cas d’usage : Quand utiliser l’un ou l’autre ?

✅ Utiliser des Server Components quand :

  • On veut Ă©viter d’envoyer du JavaScript au client.
  • On rĂ©cupĂšre des donnĂ©es dynamiques (API, base de donnĂ©es).
  • On veut bĂ©nĂ©ficier du streaming pour afficher progressivement le contenu.

✅ Utiliser des Client Components quand :

  • On a des Ă©tats (useState) ou des effets (useEffect).
  • On a des Ă©vĂ©nements utilisateur (onClick, onChange).
  • On utilise des bibliothĂšques interactives comme Framer Motion, Recharts


🎯 Conclusion : Pourquoi cette approche hybride ?

✅ Meilleure performance → Moins de JavaScript cĂŽtĂ© client.
✅ Meilleure UX → Rendu rapide et progressif (streaming).
✅ Plus de sĂ©curitĂ© → Les appels API et base de donnĂ©es restent cachĂ©s du client.

mis Ă  jour le