6. diel - Databázový klient v React - Navigácia a zdieľané konštanty
V dnešnom React tutoriále si vytvoríme navigáciu na hlavnej stránke. Tiež pridáme zdieľané konštanty a ďalšie utility funkciu.
Vytvorenie navigácie
Teraz keď máme hotový prehľad filmov aj osobností, vytvoríme si
navigačné menu v komponente App. To nám umožní jednoducho
prepínať medzi zobrazením našich dvoch prehľadov. Na prácu s navigáciou
budeme v React potrebovať knižnicu react-router-dom. Presunieme
sa preto do priečinka client/ v príkazovom riadku a spustíme
príkaz:
npm i react-router-dom@^6.5.0
Nakoniec upravíme kód komponenty App:
import React from "react"; import "bootstrap/dist/css/bootstrap.min.css"; import { BrowserRouter as Router, Link, Route, Routes, Navigate, } from "react-router-dom"; import MovieIndex from "./movies/MovieIndex"; import PersonIndex from "./persons/PersonIndex"; export function App() { return ( <Router> <div className="container"> <nav className="navbar navbar-expand-lg navbar-light bg-light"> <ul className="navbar-nav mr-auto"> <li className="nav-item"> <Link to={"/movies"} className="nav-link"> Filmy </Link> </li> <li className="nav-item"> <Link to={"/people"} className="nav-link"> Osobnosti </Link> </li> </ul> </nav> <Routes> <Route index element={<Navigate to={"/movies"} />} /> <Route exact path="/movies" element={<MovieIndex/>} /> <Route exact path="/people" element={<PersonIndex/>} /> </Routes> </div> </Router> ); } export default App;
Zdieľané konštanty a funkcie
V našej aplikácii budú rôzne komponenty používať určité spoločné konštantné hodnoty. Tieto konštanty definujeme ako vlastnosti samostatne vyčlenených konštantných objektov. To nám umožní bezpečný prístup k týmto konštantám, zdieľaný medzi komponentmi.
Žánre filmov
V priečinku movies/ vytvoríme zdrojový súbor
Genre.js, jeho obsah bude nasledovný:
const Genre = Object.freeze({ 'sci-fi': 'Sci-fi', 'adventure': 'Dobrodružné', 'action': 'Akční', 'romantic': 'Romantické', 'animated': 'Animované', 'comedy': 'Komedie', }); export default Genre;
V objekte Genre sú združené všetky kľúčové slová,
predstavujúce žánre filmov podporované v API. Každé slovo má zároveň
priradený popis, určený na zobrazenie vo formulárovom elemente
<select>.
Rola osobností
Teraz sa presunieme do zložky persons/, kde vytvoríme súbor
Role.js s týmto obsahom:
const Role = Object.freeze({ DIRECTOR: 'director', ACTOR: 'actor', }); export default Role;
Objekt Role obsahuje iba definície dvoch identifikátorov
často sa vyskytujúcich v kóde, každý predstavujúci jednu z rolí
zastávaných osobou. Má význam pre zlepšenie udržateľnosti kódu.
Formátovanie dátumu
Niektoré hodnoty záznamov sú z databázy načítané v podobe, ktorá nie je dostatočne čitateľná pre užívateľov. Také hodnoty je vhodné prevádzať na čitateľnejší formát pred ich výpisom na stránke.
V našom prípade sa to týka predovšetkým časových údajov (napr.
hodnota birthDate pri zázname osobnosti) uložených ako typ
Date. Prevod na textovú reprezentáciu vo vhodnom tvare tu nie je
úplne priamočiary, do úvahy teda pripadá možnosť ho vyčleniť ako
helper.
Presunieme sa do priečinka utils/ (v adresári
client/src/), kde vytvoríme súbor
dateStringFormatter.js a do neho vložíme kód:
export const dateStringFormatter = (str, locale = false) => { const d = new Date(str); if (locale) { return d.toLocaleDateString("cs-CZ", { year: "numeric", month: "long", day: "numeric", }); } const year = d.getFullYear(); const month = "" + (d.getMonth() + 1); const day = "" + d.getDate(); return [ year, month.length < 2 ? "0" + month : month, day.length < 2 ? "0" + day : day, ].join("-"); }; export default dateStringFormatter;
Týmto dnešnú lekciu uzavrieme.

