React Router permet de gérer la navigation dans les applications React. Cet article sert de mémo pour les éléments essentiels à connaître pour commencer à l’utiliser.
Sommaire
- Comment mettre en place React Router ?
- Comment créer des routes simples avec
<Routes>et<Route>? - Comment créer un composant 404 ?
- Comment créer des routes dynamiques et récupérer les paramètres ?
- Comment passer des données via l’URL avec les
search params? - Comment utiliser des routes imbriquées ?
- Comment mettre en place un composant de layout ?
- Comment transformer votre application en SPA avec
<Link>? - Comment personnaliser le comportement des liens avec
<Link>? - Comment récupérer des données passées avec
state? - Comment utiliser le composant
<NavLink>pour ajouter des classes CSS ? - Comment rediriger un utilisateur avec
<Redirect>? - Comment rediriger un utilisateur avec le hook
useNavigate?
Comment mettre en place React Router ?
npm install react-router-dom
import { BrowserRouter } from "react-router-dom";
ReactDOM.createRoot(document.getElementById("root")).render(
<BrowserRouter>
<App />
</BrowserRouter>
);
Comment créer des routes simples avec <Routes> et <Route> ?
Définir le chemin de l’URL avec path et le composant à afficher avec element.
<Routes>
<Route path="/" element={<Home />} />
<Route path="/livres" element={<Liste />} />
<Route path="/livres/new" element={<NewBook />} />
</Routes>
Comment créer un composant 404 ?
Créer un composant qui sera affiché si aucune route ne correspond à l’URL. Utiliser le chemin *.
<Routes>
<Route path="/" element={<Home />} />
<Route path="/livres" element={<Liste />} />
<Route path="/livres/new" element={<NewBook />} />
<Route path="*" element={<NotFound />} />
</Routes>
Comment créer des routes dynamiques et récupérer les paramètres ?
Pour créer des routes dynamiques et récupérer les paramètres, utiliser le format /:param. On peut rendre le paramètre optionnel en ajoutant ? à la fin du chemin. Exemple :
<Route path="/livres/:id" element={<Book />} />
//<Route path="/livres/:id?" element={<Book />} /> pour rendre le paramettre optionnel
Récupérer les paramètres dans le composant cible en utilisant useParams.
import { useParams } from "react-router-dom";
function Book() {
const params = useParams();
return <h1>Book n°{params.id}</h1>;
}
Comment passer des données via l’URL avec les search params ?
import { useSearchParams } from "react-router-dom";
function Book() {
const [searchParams, setSearchParams] = useSearchParams();
return (
<div>
<h1>Book n°{searchParams.get("id")}</h1>
<button onClick={() => setSearchParams({ id: 1 })}>Book 1</button>
<button onClick={() => setSearchParams({ id: 2 })}>Book 2</button>
</div>
);
}
La page peut également etre appellée avec l'URL suivante : /livres?id=1
Comment utiliser des routes imbriquées ?
Utiliser des routes imbriquées pour organiser ces routes. La route index sera affichée par défaut si on accédes à la route parente. Voici un exemple :
<Routes>
<Route path="/" element={<Home />} />
<Route path="/livres">
<Route index element={<Liste />} />
<Route path=":id" element={<Book />} />
<Route path="new" element={<NewBook />} />
</Route>
</Routes>
Comment mettre en place un composant de layout ?
Créer un composant de layout pour afficher des éléments communs à toutes les routes imbriquées. Utiliser le composant <Outlet> pour afficher les routes imbriquées. Exemple :
import { Outlet } from "react-router-dom";
function Layout() {
return (
<div>
<h1>Mon super site de livres</h1>
<Outlet />
</div>
);
}
Utiliser ce layout dans l’application comme suit :
<Routes>
<Route path="/livres" element={<Layout />}>
<Route index element={<Liste />} />
<Route path=":id" element={<Book />} />
<Route path="new" element={<NewBook />} />
</Route>
</Routes>
Comment transformer votre application en SPA avec <Link> ?
Transformer l’application en une Single Page Application (SPA) en utilisant le composant <Link> au lieu de <a> pour la navigation. Voici comment faire :
import { Link } from "react-router-dom";
<Link to="/">Accueil</Link>
<Link to="/livres">Liste</Link>
<Link to="../">Retour</Link>
Comment personnaliser le comportement des liens avec <Link> ?
Personnaliser le comportement des liens avec les propriétés replace, reloadDocument, et state de <Link>. Exemples :
<Link to="/livres" replace>
Liste
</Link>
Comment récupérer des données passées avec state ?
Utiliser useLocation pour récupérer les données passées avec state dans le composant cible.
import { useLocation } from "react-router-dom";
function Livres() {
const location = useLocation();
console.log(location.state);
return <h1>Liste des livres</h1>;
}
Comment utiliser le composant <NavLink> pour ajouter des classes CSS ?
Utiliser le composant <NavLink> pour ajouter des classes CSS à l’élément actif. Exemple :
import { NavLink } from "react-router-dom";
<NavLink to="/livres" activeClassName="active">
Liste
</NavLink>;
Comment rediriger un utilisateur avec <Redirect> ?
Pour rediriger un utilisateur, utiliser <Redirect>. Exemple :
import { Navigate } from "react-router-dom";
function NotFound() {
return <Navigate to="/" />;
}
Comment rediriger un utilisateur avec le hook useNavigate ?
Utiliser le hook useNavigate pour rediriger un utilisateur de manière programmatique. Exemples :
import { useNavigate } from "react-router-dom";
function NotFound() {
const navigate = useNavigate();
useEffect(() => {
navigate("/");
}, [navigate]);
return null;
}