đ Gestion des erreurs (error.tsx
) dans Next.js
Dans Next.js 13+ avec lâApp Router, il est possible de gĂ©rer les erreurs de maniĂšre native grĂące au fichier error.tsx
.
Contrairement Ă pages/_error.js
utilisĂ© dans lâancien systĂšme, error.tsx
est un React Client Component qui intercepte les erreurs sur une page ou une section spécifique.
1ïžâŁ Quâest-ce que error.tsx
?
đ Un fichier error.tsx
permet dâafficher une interface alternative lorsquâune erreur survient dans une page ou un layout.
đ Il remplace la gestion manuelle des erreurs avec try/catch
ou Error Boundaries
.
đ Il est spĂ©cifique Ă un dossier :
app/error.tsx
â Sâapplique Ă tout le site.app/dashboard/error.tsx
â Sâapplique uniquement aux erreurs dans/dashboard
.
2ïžâŁ Exemple dâun error.tsx
global
đ Ajout dâune gestion dâerreur pour tout le site
"use client"; // Obligatoire pour un error boundary
import { useEffect } from "react";
export default function ErrorPage({ error, reset }: { error: Error; reset: () => void }) {
useEffect(() => {
console.error("Erreur détectée :", error);
}, [error]);
return (
<div className="flex flex-col items-center justify-center h-screen">
<h1 className="text-2xl font-bold text-red-600">Une erreur est survenue</h1>
<p className="mb-4">{error.message}</p>
<button
className="px-4 py-2 bg-blue-500 text-white rounded"
onClick={() => reset()} // Recharge la page
>
RĂ©essayer
</button>
</div>
);
}
đĄ Explication :
- â
use client
est obligatoire, carerror.tsx
est un Client Component. - â
reset()
permet de rĂ©essayer en rechargeant la page. - â
useEffect
pour loguer les erreurs dans la console.
3ïžâŁ Exemple : Gestion des erreurs uniquement pour /dashboard
đ Ajout dâun error.tsx
spécifique pour /dashboard
"use client";
export default function DashboardError({ error, reset }: { error: Error; reset: () => void }) {
return (
<div className="flex flex-col items-center justify-center h-screen">
<h1 className="text-2xl font-bold text-red-600">Erreur dans le dashboard</h1>
<p className="mb-4">{error.message}</p>
<button
className="px-4 py-2 bg-orange-500 text-white rounded"
onClick={() => reset()}
>
RĂ©essayer
</button>
</div>
);
}
đ Ce fichier interceptera uniquement les erreurs dans /dashboard
.
4ïžâŁ DĂ©monstration avec une page qui gĂ©nĂšre une erreur
đ CrĂ©ons une page qui lĂšve une erreur volontairement
export default function DashboardPage() {
throw new Error("Erreur simulée dans le dashboard !");
return <h1>Tableau de bord</h1>;
}
đ RĂ©sultat :
- đš Lorsquâun utilisateur visite
/dashboard
, Next.js afficheraapp/dashboard/error.tsx
au lieu dâune erreur serveur. - đ Lâutilisateur pourra cliquer sur âRĂ©essayerâ pour tenter de recharger la page.
5ïžâŁ DiffĂ©rence avec _error.js
dans pages/
MĂ©thode | â pages/_error.js (Ancien) | â
error.tsx (App Router) |
---|---|---|
Gestion automatique des erreurs | â Non | â Oui |
Besoin dâun try/catch dans chaque page | â Oui | â Non |
Scope de lâerreur | đ Global uniquement | â Global + Sections |
CapacitĂ© de rĂ©essayer (reset() ) | â Non | â Oui |
Meilleure expĂ©rience utilisateur | â ïž Moyen | â Oui |
đŻ Conclusion : Pourquoi utiliser error.tsx
?
â Facile Ă implĂ©menter â Plus besoin de try/catch
partout.
â Modulaire â Peut ĂȘtre dĂ©fini globalement ou par section.
â ExpĂ©rience utilisateur amĂ©liorĂ©e â Lâutilisateur peut rĂ©essayer facilement.