Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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.


 

Všetky články v sekcii
REST API klient v React - Filmová databáza
Článok pre vás napísal Petr Kozler
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se aktuálně věnuje především programování v PHP (a vývoji webových aplikací obecně) nebo v Pythonu, ojediněle pak v C nebo v Javě...
Aktivity