Routing de l'application
L'application utilise React Router pour gérer la navigation côté client. La structure est organisée pour séparer la mise en page globale, la logique des pages et l'état global.
1. App.js : point d'entrée
App.js encapsule toute l'application avec plusieurs composants globaux :
- Router : permet la navigation côté client.
- AuthProvider : gère l'état de connexion et sécurise les routes privées.
- ToastContainer : permet d'afficher des notifications globales.
- AppContent : contient toutes les routes de l'application.
2. AppContent et Layout
AppContent définit les routes principales :
- La route / correspond à la page Login et n'utilise pas Layout.
- Toutes les autres routes passent par le Layout.
Layout est un composant qui encapsule toutes les pages connectées et fournit la structure globale :
- Navbar
- Topbar
- Footer
Le Layout permet de réutiliser la mise en page sur toutes les pages sans répéter le code et de conditionner l'affichage selon la route.
3. AppRoutes : centralisation des pages
AppRoutes.js contient toutes les pages de l'application après connexion.
Chaque route pointe vers un composant de page spécifique et certaines routes utilisent des paramètres dynamiques.
4. Navigation et récupération de paramètres
Pour naviguer dans l'application, nous utilisons les outils de React Router :
NavLink: pour créer des liens de navigation qui peuvent appliquer automatiquement un style actif selon la page courante.useNavigate: pour naviguer de manière automatique dans l'application, par exemple après une action ou un formulaire.useParams: pour les routes le permettant :path="/ticket/:ticketId"récupérer les paramètres dynamiques des routes (comme:ticketIdou:projetId) afin de charger les données spécifiques à l'élément sélectionné.
Cette combinaison permet de gérer la navigation interne et la récupération dynamique des données de manière propre et réactive.
// Exemple de récupération de paramètre dynamique
import { useParams } from 'react-router-dom';
function TicketPage() {
const { ticketId } = useParams();
// utiliser ticketId pour récupérer les données du ticket
}
// Exemple de navigation automatique
import { useNavigate } from 'react-router-dom';
function SubmitForm() {
const navigate = useNavigate();
const handleSubmit = () => {
// après la validation
navigate('/tickets');
};
}
5. Bonnes pratiques
- Séparer la structure globale (Layout) et le contenu des pages.
- Centraliser les routes dans
AppRoutespour une maintenance facile. - Encapsuler l'application avec
Router,AuthProvideretToastContainerpour gérer navigation, authentification et notifications globales. - Utiliser des routes dynamiques pour accéder aux ressources spécifiques.