Spracovanie chyby Not Found v React Router

Pri vytváraní aplikácie je potrebné venovať pozornosť aj vzniku rôznych chýb počas jej následného používania. V tejto lekcii sa naučíme pracovať s chybou 'Not Found'. Takáto chyba sa môže vyskytnúť, napríklad ak používateľ klikne na odkaz, ktorý vedie na neexistujúcu stránku.

Na začiatok otvorme našu aplikáciu, ktorú sme robili na predchádzajúcich lekciách, a nahraďme verzovanie komponentu Root. Teraz pri spustení aplikácie sa nám bude zobrazovať zoznam dvoch produktov:

routes/root.jsxfunction Root() {
  return (
    <nav>
      <a href={`/products/1`}>Product1</a>
      <a href={`/products/2`}>Product2</a>
    </nav>
  );
}

export default Root;

Pridajme trochu štýlu do index.css:

index.cssbody {
  font-size: 18px;
  line-height: 1.5;
}

nav {
  display: flex;
  flex-direction: column;
}

a {
  text-decoration: none;
  color: blue;
}

A teraz klikajte na odkazy. Pretože nemáme šablóny stránok pre naše produkty, odkazy nás zavedú iba na obrazovku s chybou '404 Not Found' a s výčitkou, že sme mohli vymyslieť sami niečo krajšie a zaujímavejšie, ako to, čo nám React Router zobrazil predvolene.

Vytvorme našu vlastnú stránku, ktorá sa zobrazí v prípade vzniku chyby 404. Preto v priečinku src vytvoríme súbor error-page-404.jsx.

Vnútri React komponentu ErrorPage404 využijeme hook useRouteError na zachytanie chyby, ktorú budeme vypisovať do konzoly:

error-page-404.jsximport { useRouteError } from 'react-router-dom';

function ErrorPage404() {
  const error = useRouteError();
  console.error(error);

}

export default ErrorPage404;

Ďalej vo verzovaní komponentu ErrorPage404 budeme zobrazovať pár nadpisov, informujúcich o chybe a vypíšeme také vlastnosti objektu error, ako statusText a data (objekt error a jeho vlastnosti môžete tiež vidieť, ak otvoríte konzolu a začnete klikáť na naše odkazy v aplikácii).

error-page-404.jsxreturn (
  <div>
    <h1>Ahoj! Toto je chybová stránka</h1>
    <h2>404 Chyba Not Found</h2>
    <p>
      <i>{error.statusText}</i>
    </p>
    <p>
      <i>{error.data}</i>
    </p>
  </div>
);

Nezabudnite určite otvoriť súbor main.jsx a pridať ešte jeden riadok importu s ErrorPage404:

main.jsximport ErrorPage404 from './error-page-404';

A tiež pridajte ešte jednu vlastnosť errorElement do objektu Router - tento element sa zobrazí, keď na danej trase vznikne chyba. Hodnotou elementu chyby bude náš komponent ErrorPage404:

main.jsxconst router = createBrowserRouter([
  {
    path: '/',
    element: <Root />,
    errorElement: <ErrorPage404 />,
  },
]);
Задание 1

Vezmite aplikáciu, ktorú ste vytvorili v úlohách k predchádzajúcej lekcii. Pridajte na hlavnú stránku zoznam, pozostávajúci z pár odkazov, ako je to ukázané v lekcii. Nech hodnotami href odkazov sú - /students/1 a /students/2, a textom odkazov - 'Student1' a 'Student2' zodpovedajúco. Uistite sa, že pri kliknutí na odkazy sa vám objaví obrazovka s chybou, ktorú React Router zobrazuje predvolene.

Задание 2

A teraz vytvorte svoju vlastnú stránku s chybou 404, môžete na nej zobraziť to, čo chcete. Pripojte ju, ako je ukázané v lekcii. A teraz sa uistite, že pri kliknutí na odkazy sa dostanete práve na ňu.