Projekt

Obecné

Profil

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>