Projekt

Obecné

Profil

React router » Historie » Revize 4

Revize 3 (Jiří Trefil, 2023-03-26 21:01) → Revize 4/5 (Jiří Trefil, 2023-03-26 21:01)

h1. React router 

 React router funguje obdobně jako jakýkoliv jiný router (softwarový, abstraktně i ten hardwarový) - pro konkrétní url přesměrovává requesty konkrétním komponentám.  
 Následující code snippet definuje jednoduchý router pro 3 koncové body Reactí aplikace a příslušné komponenty, které jsou mountovány při requestu na tento endpoint. 

 <pre> <code class="react"> 
 import React from "react" 
 //naimportime samotny router - je nutne jej nainstalovat 
 import {BrowserRouter, Routes, Route} from "react-router-dom"; 
 //naimpotime konfiguraci stranek, ktere mame vytvorene 
 import {pages} from "./pagesData"; 
 //vlastni datovy typ pro itemy, kterym router rozumi 
 import {RouterType} from "../lib/global/datatypes"; 

 const Router = () =>{ 
     //vytvorime jednotlive routes 
     //title je nadpis, ktery bude element mit, napriklad "Nahrat soubor" 
     //path je samotne URL, ktere bude poslouchano a smerovana na konkretni element 
     //element je samotna komponenta, ktera bude zavolana pri samotnem requestu 
     const routes = pages.map(({ path, title, element }: RouterType) =>{ 
         return <Route key={title} path= {path} element={element}/> 
     }); 
     return( 
         //obalime jednotlive routes samotnym routerem 
         <BrowserRouter> 
             <Routes> 
                 {routes} 
             </Routes> 
         </BrowserRouter> 
     ) 
 } 
 export default Router; 
 </pre></code> 

 Tento router sice zafunguje, pokud bude naimportován, ale neumožňuje uživateli navigaci konvenčním způsobem - tedy klikáním do nějakého menu. Je nutné tedy router ještě obalit nějakým vhodným HTML elementem, například unordered listem. 
 Následující code snippet vytváří menu pro uživatele. 

 <pre> <code class="react"> 

 
 import React from "react" 
 import {pagesRefs} from "../pages/pagesData" 
 import {RouterRefs} from "../lib/global/datatypes" 
 import "../assets/MenuNavbar.css" 

 //wrapper pro klienta, aby mohl routovat bez primeho psani do url 
 //navbar zabali router 
 const MenuNavbar = () => { 
     let key: number = 0; 
     const items = pagesRefs.map(({path,name}: RouterRefs)=>{ 
     return <li key={key++}><a href={path}> {name}</a> </li> 
             }); 


     return( 
         <div className={"navigation-menu"}> 
             <ul id={"nav-menu"}> 
                 {items} 
             </ul> 
         </div> 
     ) 
 }; 

 export default MenuNavbar; 
 </pre> </code>