React Router
Permettre de passer d’une page à l’autre dans votre application React.
Manuel
Pour l'installer dans votre projet :
Exemple de SPA avec Router
import {
BrowserRouter,
Routes,
Route,
Outlet,
useParams,
} from 'react-router-dom';
import './App.css';
function Modele() {
return (
<div>
<a href="/">Page principale</a>
<a href="/dadams">Douglas Adams</a>
<a href="/oscard">Orson Scott Card</a>
<br />
<Outlet />
</div>
);
}
function PagePrincipale() {
return <h1>Page principale</h1>;
}
function DouglasAdams() {
return (
<>
<h1>Page de Douglas Adams</h1>
<a href="/livre/1">Livre 1</a>
<a href="/livre/2">Livre 2</a>
</>
);
}
function OrsonScottCard() {
return <h1>Page de Orson Scott Card</h1>;
}
function Livre() {
const { id } = useParams();
return <h1>Livre #{id}</h1>;
}
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Modele />}>
<Route index element={<PagePrincipale />} />
<Route path="dadams" element={<DouglasAdams />} />
<Route path="oscard" element={<OrsonScottCard />} />
<Route path="livre/:id" element={<Livre />} />
</Route>
</Routes>
</BrowserRouter>
);
}
export default App;
CodeSandbox
Différents éléments du projet monrouteur
BrowserRouter
Un <BrowserRouter> stocke l'emplacement actuel dans la barre d'adresse du navigateur en utilisant des URL propres et navigue en utilisant la pile d'historique intégrée du navigateur.
function App() {
return (
<BrowserRouter>
// Le reste de l'application React
</BrowserRouter>
);
}
Manuel
Routes
L'élément <Routes> (au pluriel) indique l'ensemble des routes qui seront disponibles dans l'application. Doit contenir au moins un élément <Route> (au singulier).
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Modele />}/>
</Routes>
</BrowserRouter>
);
}
Route
L'élément <Route> (au singulier) définit une page de l'application à afficher selon son URL.
Par exemple :
Cette route indique que http://serveur/dadams pointe sur la composante DouglasAdams.
Manuel
Routes imbriquées
L'élément <Route> (au singulier) peut contenir des routes enfants. Comme ceci :
<Route path="/" element={<Modele />}>
<Route index element={<PagePrincipale />} />
<Route path="dadams" element={<DouglasAdams />} />
<Route path="oscard" element={<OrsonScottCard />} />
<Route path="livre/:id" element={<Livre />} />
</Route>
Plusieurs choses importantes ici :
-
La route "/" est la route parent des autres. Lorsqu'un élément est mentionné dans la route parent, l'élément est généré avant celui de la route enfant. Il faut par contre indiquer dans l'élément parent à quel endroit faut-il générer l'élément enfant (avec l'élément <Outlet>) :
-
Le mot clé index indique l'élément qui sera généré lorsque l'utilisateur navigue à l'URL du parent.
Routes dynamiques
On peut placer un paramètre dans une route qui peut être lu par l'élément généré.
Dans la route, on peut avoir le paramètre :id :
Dans l'élément, on accède au paramètre avec la fonction useParams() :