Zpracování chyby Not Found v React Router

Při vytváření aplikace je třeba věnovat pozornost také výskytu různých chyb v průběhu jejího dalšího používání. V této lekci se naučíme pracovat s chybou 'Not Found'. K takové chybě může dojít, kupříkladu pokud uživatel klikne na odkaz vedoucí na neexistující stránku.

Pro začátek otevřeme naši aplikaci, kterou jsme vytvářeli v předchozích lekcích, a nahradíme vzhled komponenty Root. Nyní při spuštění aplikace se nám bude zobrazovat seznam dvou produktů:

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

export default Root;

Přidejme několik stylů 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 nyní klikněte na odkazy. Protože nemáme šablony stránek pro naše produkty, odkazy nás zavedou pouze na obrazovku s chybou '404 Not Found' a s výčitkou, že jsme si mohli vymyslet sami něco hezčího a zajímavějšího, než to, co React Router zobrazil ve výchozím nastavení.

Vytvořme naši vlastní stránku, která se bude zobrazovat v případě výskytu chyby 404. K tomu ve složce src vytvoříme soubor error-page-404.jsx.

Uvnitř React komponenty ErrorPage404 použijeme hook useRouteError pro zachycení chyby, kterou budeme vypisovat do konzole:

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

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

}

export default ErrorPage404;

Dále ve vzhledu komponenty ErrorPage404 budeme zobrazovat pár nadpisů, informujících o chybě a vypíšeme takové vlastnosti objektu error, jako statusText a data (objekt error a jeho vlastnosti můžete také vidět, pokud otevřete konzoli a začnete klikat na naše odkazy v aplikaci).

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

Nezapomeňte určitě otevřít soubor main.jsx a přidat ještě jeden řádek importu s ErrorPage404:

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

A také přidejte ještě jednu vlastnost errorElement do objektu Router - tento prvek se zobrazuje, když na dané trase dojde k chybě. Hodnotou prvku chyby bude naše komponenta ErrorPage404:

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

Vezměte aplikaci, kterou jste vytvořili v úkolu k minulé lekci. Přidejte na hlavní stránku seznam sestávající z pár odkazů, jak je znázorněno v lekci. Nechť hodnotami href odkazů jsou - /students/1 a /students/2, a textem odkazů - 'Student1' a 'Student2' odpovídajícím způsobem. Ujistěte se, že při kliknutí na odkazy se vám objeví obrazovka s chybou, kterou React Router vypisuje ve výchozím nastavení.

Задание 2

A nyní vytvořte svou vlastní samostatnou stránku s chybou 404, můžete na ní vypsat to, co chcete. Připojte ji, jak je znázorněno v lekci. A nyní se ujistěte, že při kliknutí na odkazy se dostanete právě na ni.