SmarMaker - Documentation
Docs» front:routage

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
front:routage [2025/09/25 14:08] – [Routes publiques et privées] paolofront:routage [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 127.0.0.1
Ligne 1: Ligne 1:
-# Routage 
  
-Documentation [React-router-dom](https://reactrouter.com/home) 
- 
-**React-router-dom** est la lib la plus utilisée pour gérer le routage dans une application React. Elle met à disposition des composants permettant d'afficher des pages sans recharger l'application (**Single Page Application**) selon l'url ainsi que des hooks facilitant son utilisation. 
- 
-### Mettre en place un router 
- 
-Voyons ce qu'on peut faire avec notre page **Login**. 
- 
-On rajoute un dossier ''Router'' et son ''index.jsx'' dans ''components/app'' par exemple. 
- 
-``` 
-import { Login } from "../pages/Login"; 
-import { Error404 } from "../pages/Error404"; 
- 
-export const Router = () => { 
-    return ( 
-        <BrowserRouter> 
-            <Routes> 
-                <Route path={`/login`} element={<Login />} /> 
-                <Route path={`*`} element={<Error404 />} /> 
-            </Routes> 
-        </BrowserRouter> 
-    );         
-}; 
-``` 
- 
-On a ajouté au passage une page **Error404** sur ''*'' pour intercepter tout autre chemin. 
- 
-On remplace notre composant ''<Login />'' par ''<Router />''. 
- 
-``` 
-import { Router } from "./components/app/Router"; 
- 
-export const App = () => { 
-    return ( 
-        <Router /> 
-    ); 
-}; 
-``` 
- 
-Et voilà notre application possède un router ! 
-### Routes publiques et privées 
- 
-Dans la plupart des applications, il est nécessaire de distinguer les routes publiques accessibles à tout utilisateur, des routes privées qui nécessitent une authentification. 
- 
-Comment fait-on ? Surprise ! On crée deux nouveaux composants: **PublicRoutes** et **PrivatesRoutes**. 
- 
-``` 
-import { Outlet, Navigate } from "react-router-dom"; 
- 
-export const PublicRoutes = () => { 
-    const user = localStorage.getItem("user") ?? sessionStorage.getItem("user"); 
-     
-    return user ? <Navigate to="/" : <Outlet />;         
-}; 
-``` 
-``` 
-import { Outlet, Navigate } from "react-router-dom"; 
- 
-export const PrivateRoutes = () => { 
-    const user = localStorage.getItem("user") ?? sessionStorage.getItem("user"); 
-     
-    return user ? <Outlet /> : <Navigate to="/login" />;         
-}; 
-``` 
-Dans ces deux composants, on pose une condition qui influe sur l'affichage. ''<Outlet />'' est l'équivalent du prop **children** pour les composants classiques et représente le contenu de la balise. ''<Navigate />'' modifie le chemin. 
- 
-Pour résumer, si il y a un utilisateur authentifié (stocké en local ou session), **PublicRoutes** redirige vers un chemin privée (ici ''"/"''), sinon affiche son contenu (page **Login** par exemple). 
- 
-A l'inverse, PrivateRoutes affiche son contenu (page **Home** par exemple) si authentifié et redirige vers un chemin publique (ici ''"/login"'') dans le cas contraire. 
-``` 
-import { Login } from "../../pages/Login"; 
-import { Home } from "../../pages/Home"; 
-import { Error404 } from "../../pages/Error404"; 
- 
-import { PublicRoutes } from "../PublicRoutes"; 
-import { PrivateRoutes } from "../PrivateRoutes"; 
- 
-export const Router = () => { 
-    return ( 
-        <BrowserRouter> 
-            <Routes> 
-                <Route element={<PublicRoutes />}> 
-                    <Route path={`/login`} element={<Login />} /> 
-                </Route> 
-                <Route element={<PrivateRoutes />}> 
-                    <Route path={`/`} element={<Home />} /> 
-                </Route> 
-                <Route path={`*`} element={<Error404 />} /> 
-            </Routes> 
-        </BrowserRouter> 
-    );         
-}; 
-``` 
- 
-On a ajouté au passage une page **Home** histoire d'avoir une route privée. 
Made with ❤ by CAP-REL · SmartMaker · GNU AGPL v3+
Code source · Faire un don
SmarMaker - Documentation

Table of Contents

  • SmartAuth
  • SmartMaker - Back (PHP)
    • Mapping Dolibarr - React
  • SmartMaker - Front (React)
    • Animations de pages
    • Architecture
    • Astuces
    • Calendar
    • Composants et pages
    • Configuration du Provider
    • Debug et Logs
    • Hooks SmartCommon
    • PWA (Progressive Web App)
    • Requêtes API
    • Routage
    • SmartCommon
    • Stockage de données
    • Synchronisation offline
    • Thèmes
    • Traductions
  • HowTo - Pas à pas - Votre première application
    • Développement PHP (back)
    • Développement React (front)
    • Première étape : Module Builder Dolibarr
    • SmartAuth
    • SmartBoot : Un squelette prêt à l'emploi
  • Formation SmartMaker
    • Module 1 : Fondamentaux JavaScript ES6+
      • Chapitre 1 : Variables et Scope
      • Chapitre 2 : Fonctions
      • Chapitre 3 : Programmation Asynchrone
      • Chapitre 4 : Modules ES6
    • Module 2 : Introduction à React
      • Chapitre 1 : Philosophie React
      • Chapitre 2 : JSX
      • Chapitre 3 : Composants
    • Module 3 : Hooks React Fondamentaux
      • Chapitre 1 : useState
      • Chapitre 2 : useEffect
      • Chapitre 3 : useRef
      • Chapitre 4 : useContext
    • Module 4 : React Avancé
      • Chapitre 1 : useCallback et useMemo
      • Chapitre 2 : Custom Hooks
      • Chapitre 3 : Redux et Redux Toolkit
    • Module 5 : Architecture SmartMaker
      • Chapitre 1 : Structure du projet
      • Chapitre 2 : Configuration
      • Chapitre 3 : Flux de données
    • Module 6 : SmartCommon - Composants
      • Chapitre 1 : Mise en page
      • Chapitre 2 : Navigation
      • Chapitre 3 : Formulaires
      • Chapitre 4 : Affichage
    • Module 7 : SmartCommon - Hooks
      • Chapitre 1 : useApi
      • Chapitre 2 : Gestion d'état
      • Chapitre 3 : Hooks utilitaires
      • Chapitre 4 : Synchronisation Offline
    • Module 8 : Backend API (PHP)
      • Chapitre 1 : Routage
      • Chapitre 2 : Controllers
      • Chapitre 3 : Mappers
      • Extrafields et formulaires dynamiques
    • Module 9 : Intégration complète
      • Chapitre 1 : Backend
      • Chapitre 2 : Frontend
      • Chapitre 3 : Déploiement
    • Module 10 : Fonctionnalités avancées
      • Chapitre 1 : Mode offline
      • Chapitre 2 : Internationalisation (i18n)
      • Chapitre 3 : Autres fonctionnalités
    • Module 11 : Bonnes pratiques
  • Démonstration
  • Start
  • Composants et pages