La configuration Vite.JS
avec React Router 7
Posez vos questions 24/7 à notre IA experte en React Router 7
Validez vos acquis avec des quiz personnalisés et un feedback instantané
Entrez votre email pour débloquer cette leçon gratuite
Depuis la version 7, React Router s'intègre directement comme un plugin de Vite, ce qui simplifie la configuration de notre projet.
vite.config.ts
Voici la configuration par défaut :
1import { reactRouter } from "@react-router/dev/vite";2import tailwindcss from "@tailwindcss/vite";3import { defineConfig } from "vite";4import tsconfigPaths from "vite-tsconfig-paths";56export default defineConfig({7plugins: [tailwindcss(), reactRouter(), tsconfigPaths()],8});
Trois plugins sont utilisés dans cette configuration :
Avec cette configuration, il nous reste plus qu'à créer nos composants React. Mais d'abord, jetons un coup d'oeil au point d'entrée de notre application.
root.tsx
Le fichier root.tsx est le point d'entrée de notre application. Ce fichier est obligatoire, et son contenu sera affiché sur toutes les pages.
Il contient par exemple la structure de notre app, comme les balises HTML et les meta tags essentiels pour le SEO.
1import {2Links,3Meta,4Outlet,5Scripts,6ScrollRestoration,7isRouteErrorResponse,8} from "react-router";910import type { Route } from "./+types/root";11import "./app.css";1213export const links: Route.LinksFunction = () => [14{ rel: "preconnect", href: "https://fonts.googleapis.com" },15{16rel: "preconnect",17href: "https://fonts.gstatic.com",18crossOrigin: "anonymous",19},20{21rel: "stylesheet",22href: "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap",23},24];2526export function Layout({ children }: { children: React.ReactNode }) {27return (28<html lang="en">29<head>30<meta charSet="utf-8" />31<meta name="viewport" content="width=device-width, initial-scale=1" />32<Meta />33<Links />34</head>35<body>36{children}37<ScrollRestoration />38<Scripts />39</body>40</html>41);42}4344export default function App() {45return <Outlet />;46}4748export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) {49let message = "Oops!";50let details = "An unexpected error occurred.";51let stack: string | undefined;5253if (isRouteErrorResponse(error)) {54message = error.status === 404 ? "404" : "Error";55details =56error.status === 40457? "The requested page could not be found."58: error.statusText || details;59} else if (import.meta.env.DEV && error && error instanceof Error) {60details = error.message;61stack = error.stack;62}6364return (65<main className="pt-16 p-4 container mx-auto">66<h1>{message}</h1>67<p>{details}</p>68{stack && (69<pre className="w-full p-4 overflow-x-auto">70<code>{stack}</code>71</pre>72)}73</main>74);75}
Analysons chaque élément de cette page, un par un.
links
La méthode links
permet de déclarer les feuilles de styles (CSS), les typographies de notre application et le favicon
.
1export const links: Route.LinksFunction = () => [2{ rel: "preconnect", href: "https://fonts.googleapis.com" },3{4rel: "preconnect",5href: "https://fonts.gstatic.com",6crossOrigin: "anonymous",7},8{9rel: "stylesheet",10href: "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap",11},12];
meta
La méthode meta
n'est pas définie dans le fichier root.tsx
, mais elle est indispensable pour le SEO de ton application. Elle permet de définir les balises meta, qui seront référencées sur les moteurs de recherches comme Google.
1export const meta: MetaFunction = () => {2return [3{ title: "Very cool app | Remix" },4{5property: "og:title",6content: "Very cool app",7},8{9name: "description",10content: "This app is the best",11},12];13};
Ces balises seront ensuite placées à l'intérieur de l'élément head
, à la place du composant Meta
(qui lui, est présent dans le fichier root.tsx
.
Nous évoquerons davantage ce concept dans le module SEO de ce cours.
Dans une application typique, nous allons charger le style par défaut de notre application (comme la configuration TailwindCSS) dans la méthode links
du fichier root.tsx
.
Ce méthode va de pair avec le composant Links
, qu'on retrouve dans le composant Layout
de ce même fichier. Il est recommandé de le laisser dans la balise head
, pour que les liens soient pré-chargés en premier.
Layout.tsx
Le composant Layout a été introduit l'année dernière, pour résoudre un problème d'hydratation. Il permet également de ne pas avoir à redéclarer les éléments html
et head
en cas de déclenchement d'une erreur.
Le composant clé à retenir est l'Outlet, qui permet d'afficher dynamiquement le contenu de la page active, facilitant ainsi la création de routes imbriquées. Pour que nos composants soient visibles sur l'interface, ils doivent être exportés par défaut. On importe également notre feuille de style Tailwind dans ce fichier, et on peut gérer dynamiquement d'autres styles CSS grâce à la méthode links.
ErrorBoundary
Le composant ErrorBoundary permet d'offrir une meilleure expérience à nos utilisateurs en cas d'erreur critique de notre application.
Il permet également d'isoler l'erreur dans les routes imbriquées, conservant une partie de l'interface utilisateur et ne le bloquant pas dans sa navigation.
Outlet
Finalement, le composant Outlet
va afficher la vue de notre application.
Dans la prochaine leçon, nous mettons tous ces concepts en pratique en déclarant notre première route.
Quelle est la principale différence entre les composants client et serveur dans React ?
Quelle technique est recommandée pour éviter les rendus inutiles dans React ?
Quel hook permet de gérer les effets de bord dans un composant React ?
Comment implémenter la gestion des erreurs pour les requêtes API dans React ?
Quelle est la meilleure pratique pour déployer une application React en production ?