React Router
React Router + React Router DOM
1. Instalarea dependințelor
Pentru a gestiona navigarea între paginile aplicației, vom utiliza librăria react-router.
Închidem terminalul din directorul client (dacă rulează deja serverul de dezvoltare) și instalăm pachetele necesare rulând următoarea comandă:
npm i react-router react-router-dom sonner2. Structurarea aplicației și crearea paginilor principale
În directorul src, creăm un nou folder numit pages. Acesta va conține componentele React corespunzătoare fiecărei pagini din aplicație, pentru o structură clară și scalabilă.
Codul pentru pagina de Homepage, pentru care vom crea fișierul HomePage.jsx:
Codul pentru pagina de Products, pentru care vom crea fișierul ProductsPage.jsx:
3. Routing în React cu React Router
Pentru a gestiona navigarea între paginile aplicației, vom crea un fișier dedicat configurării rutelor. Acesta va mapa URL-urile către componentele React corespunzătoare.
În directorul client, creăm fișierul router.jsx, care va conține structura principală de rutare utilizând createBrowserRouter din react-router-dom.
💡 Cum funcționează createBrowserRouter?
createBrowserRouter?createBrowserRouter este o funcție din react-router-dom care permite definirea structurii de navigare a aplicației folosind History API din browser. Aceasta mapează fiecare URL la o componentă React, fără a reîncărca pagina, facilitând astfel navigarea în stil Single Page Application (SPA).
Pe scurt, createBrowserRouter:
construiește un arbore de rute
asociază fiecare cale (
path) cu o componentă (element)permite rutare ierarhică (nested routes) — componente părinte care găzduiesc copii prin
<Outlet />gestionează automat istoricul de navigație (back, forward)
generează un router ce va fi transmis spre aplicație prin
RouterProvider
Acest mecanism permite încărcarea doar a componentelor necesare în funcție de URL, îmbunătățind performanța și experiența utilizatorului în aplicațiile React moderne.
4. Inițializarea aplicației în main.jsx
main.jsxFișierul main.jsx reprezintă punctul de intrare al aplicației React.
În această etapă, atunci când aplicația este montată în DOM, se activează modul de verificare StrictMode, se integrează store-ul Redux pentru gestionarea stării globale și se atașează sistemul de rutare prin RouterProvider.
Acest fișier asigură bootstrap-ul aplicației, încărcând toate funcționalitățile de bază înainte ca utilizatorul să interacționeze cu interfața.
Rolul componentelor din main.jsx
StrictMode– activarea modului strict în React; ajută la detectarea problemelor potențiale în aplicație, precum efecte secundare neașteptate sau metode depășite. Nu afectează comportamentul aplicației în producție.Provider– wrapper-ul oferit dereact-reduxcare furnizează store-ul aplicației tuturor componentelor. Astfel, componentele pot accesa și modifica starea globală prinuseSelectorșiuseDispatch.RouterProvider– componenta care primește router-ul creat cucreateBrowserRouterși gestionează navigarea între pagini fără reîncărcarea paginii, permițând implementarea unei aplicații de tip SPA (Single Page Application).
5. Structura principală a aplicației în App.jsx
App.jsxFișierul App.jsx definește layout-ul de bază al aplicației.
Componentele comune, cum ar fi bara de navigație (Navbar), sunt montate aici o singură dată și rămân vizibile pe toate paginile.
Conținutul specific fiecărei rute este redat prin intermediul componentei <Outlet />, care acționează ca un punct de inserție pentru componentele rutei curente.
Cum funcționează Outlet în App.jsx
Navbar– componenta fixă care rămâne vizibilă pe toate paginile aplicației.Toaster- componenta care ne oferă posibilitatea de a afișa mesaje de tip toast ca și răspuns de la requesturi<Outlet />– punctul de inserție pentru componentele definite în router. Orice componentă asociată unei rute (ex.HomePage,ProductsPage) va fi redată aici, în funcție de URL-ul curent.
Această abordare permite implementarea rutării nested și separarea clară între layout și conținutul specific paginilor.
6. Actualizarea componentei Navbar
Analiza modificărilor în Navbar
1. Navigație și evidențierea rutei active
În versiunea finală, s-a introdus
useLocationdinreact-router-dompentru a determina ruta curentă.Funcția
isActive(href)comparălocation.pathnamecu link-urile dinnavigationși aplică stilul corespunzător elementului activ (bg-gray-900 text-white).Impact: Navbar-ul devine dinamic și evidențiază automat pagina curentă fără a necesita modificări manuale ale proprietății
current.
2. Link-urile desktop și mobile
Desktop:
<Link>dinreact-router-domînlocuiește<a>, permițând navigație SPA fără reload.Mobile:
<DisclosureButton>foloseșteisActivepentru stilizarea elementului activ în meniul dropdown.
3. Meniul de profil
Icon-ul și opțiunile (
Your profile,Settings,Sign out) rămân neschimbate.Folosirea
@headlessui/reactși aria attributes asigură accesibilitate și comportament consistent pentru dropdown.
4. Mobile menu (DisclosurePanel)
DisclosurePanel)Lista de navigație este generată din același array
navigation.Se aplică același principiu
isActivepentru a marca vizual link-ul corespunzător rutei curente.
5. Sign in / Sign out
În toate meniurile (desktop și mobile), butonul de autentificare folosește funcția
handleAutoClick.Aceasta navighează către
/logindacă utilizatorul nu este logat sau face logout și redirecționează către / dacă utilizatorul este deja logat.Impact: Navigația și autentificarea sunt consistente pe toate dispozitivele, fără duplicare de logică sau comportamente diferite între desktop și mobil.
7. Actualizarea componentei HomePage
Odată cu instalarea librăriei react-router, putem beneficia de foarte multe hook-uri și metode, printre care și metoda de Link care ne ajută să redirecționăm utilizatorul către altă pagină, fără să dăm refresh la pagină.
Astfel, edităm componenta de HomePage și înlocuim hyperlink-ul cu componenta de Link.
Last updated