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 sonner

2. 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.

circle-check

💡 Cum funcționează createBrowserRouter?

4. Inițializarea aplicației în main.jsx

Fiș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.

circle-check

5. Structura principală a aplicației în App.jsx

Fiș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.

circle-check

6. Actualizarea componentei Navbar

circle-info

Analiza modificărilor în Navbar

1. Navigație și evidențierea rutei active

  • În versiunea finală, s-a introdus useLocation din react-router-dom pentru a determina ruta curentă.

  • Funcția isActive(href) compară location.pathname cu link-urile din navigation ș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.

  • Desktop: <Link> din react-router-dom înlocuiește <a>, permițând navigație SPA fără reload.

  • Mobile: <DisclosureButton> folosește isActive pentru 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)

  • Lista de navigație este generată din același array navigation.

  • Se aplică același principiu isActive pentru 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 /login dacă 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