React router » Historie » Verze 3
Jiří Trefil, 2023-03-26 21:01
1 | 1 | Jiří Trefil | h1. React router |
---|---|---|---|
2 | 2 | Jiří Trefil | |
3 | 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. |
||
4 | 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. |
||
5 | |||
6 | <pre> <code class="react"> |
||
7 | import React from "react" |
||
8 | //naimportime samotny router - je nutne jej nainstalovat |
||
9 | import {BrowserRouter, Routes, Route} from "react-router-dom"; |
||
10 | //naimpotime konfiguraci stranek, ktere mame vytvorene |
||
11 | import {pages} from "./pagesData"; |
||
12 | //vlastni datovy typ pro itemy, kterym router rozumi |
||
13 | import {RouterType} from "../lib/global/datatypes"; |
||
14 | |||
15 | const Router = () =>{ |
||
16 | //vytvorime jednotlive routes |
||
17 | //title je nadpis, ktery bude element mit, napriklad "Nahrat soubor" |
||
18 | //path je samotne URL, ktere bude poslouchano a smerovana na konkretni element |
||
19 | //element je samotna komponenta, ktera bude zavolana pri samotnem requestu |
||
20 | const routes = pages.map(({ path, title, element }: RouterType) =>{ |
||
21 | return <Route key={title} path= {path} element={element}/> |
||
22 | }); |
||
23 | return( |
||
24 | //obalime jednotlive routes samotnym routerem |
||
25 | <BrowserRouter> |
||
26 | <Routes> |
||
27 | {routes} |
||
28 | </Routes> |
||
29 | </BrowserRouter> |
||
30 | ) |
||
31 | } |
||
32 | export default Router; |
||
33 | </pre></code> |
||
34 | 3 | Jiří Trefil | |
35 | 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. |
||
36 | Následující code snippet vytváří menu pro uživatele. |
||
37 | |||
38 | <pre> <code class="react"> |
||
39 | import React from "react" |
||
40 | import {pagesRefs} from "../pages/pagesData" |
||
41 | import {RouterRefs} from "../lib/global/datatypes" |
||
42 | import "../assets/MenuNavbar.css" |
||
43 | |||
44 | //wrapper pro klienta, aby mohl routovat bez primeho psani do url |
||
45 | //navbar zabali router |
||
46 | const MenuNavbar = () => { |
||
47 | let key: number = 0; |
||
48 | const items = pagesRefs.map(({path,name}: RouterRefs)=>{ |
||
49 | return <li key={key++}><a href={path}> {name}</a> </li> |
||
50 | }); |
||
51 | |||
52 | |||
53 | return( |
||
54 | <div className={"navigation-menu"}> |
||
55 | <ul id={"nav-menu"}> |
||
56 | {items} |
||
57 | </ul> |
||
58 | </div> |
||
59 | ) |
||
60 | }; |
||
61 | |||
62 | export default MenuNavbar; |
||
63 | </pre> </code> |