📝 Exercices — R10 React Router
10 exercices sur la navigation, les routes dynamiques et les routes protégées.
Configuration du router
Configurez React Router en enveloppant votre application dans BrowserRouter et en définissant des routes avec Routes. Créez 3 routes : /, /about et * (404).
Routes de base avec composants
Créez 4 pages (Home, Blog, Contact, NotFound) et configurez les routes correspondantes. Chaque Route doit avoir un path et un element.
Navigation avec Link et NavLink
Créez une barre de navigation avec Link et NavLink. Le NavLink doit appliquer un style différent quand le lien est actif via la prop className ou style avec la fonction { isActive }.
Navigation programmatique — useNavigate
Créez un formulaire de connexion qui redirige vers /dashboard après soumission avec useNavigate. Ajoutez aussi un bouton retour avec navigate(-1).
Paramètres URL — useParams
Créez une liste d'articles et une page de détail. La route de détail utilise /articles/:id. Dans ArticleDetail, récupérez l'id avec useParams pour afficher l'article correspondant.
Query string — useSearchParams
Créez une liste paginée filtrée par catégorie. L'état de la pagination et du filtre doit vivre dans l'URL (ex: ?page=2&cat=react) via useSearchParams.
Routes imbriquées avec Outlet
Créez un layout avec navbar persistante qui utilise <Outlet /> pour afficher les pages enfants. Les routes blog et blog/:slug doivent être imbriquées dans la route parente.
Routes protégées avec Navigate
Créez un composant RequireAuth qui redirige vers /login avec <Navigate to="/login" replace /> si l'utilisateur n'est pas connecté. Protégez les routes /dashboard et /profile.
useLocation — fil d'Ariane
Utilisez useLocation pour créer un composant Breadcrumb qui affiche le chemin actuel sous forme de liens cliquables (ex: Accueil / blog / mon-article). Basez-vous sur location.pathname.
Application complète avec React Router
Créez une mini-application e-commerce avec : layout, page accueil, liste produits (/produits), détail produit (/produits/:id), login et dashboard protégé. Utilisez useParams, NavLink, RequireAuth et Navigate.