Získavanie údajov z načítača podľa URL parametrov v React Router

V predchádzajúcej lekcii sme napísali funkciu pre získanie údajov stránky produktu, importujme getProduct v súbore product.jsx:

routes/product.jsximport { getProduct } from '../forStorage';

Napíšme funkciu načítača loader ihneď po importe a pred funkciou Product. Odovzdajme do nej URL parametre:

routes/product.jsxexport async function loader({ params }) {
  const product = await getProduct(params.productId);
  return { product };
}

Tiež importujme hook useLoaderData pre použitie údajov získaných načítačom:

routes/product.jsximport { useLoaderData } from 'react-router-dom';

Aplikujme useLoaderData, zodpovedajúcim spôsobom nahradíme riadok s vytvorením objektu product na začiatku funkcie Product nasledujúcim:

routes/product.jsxconst { product } = useLoaderData();

A, samozrejme, trochu zmeníme našu verziu, pretože sme odstránili starý objekt product. Nahraďme obsah odsekov:

routes/product.jsx<p>Názov: {product.name}</p>
<p>Cena: {product.cost}</p>
<p>Množstvo: {product.amount}</p>

Nasledujúcim:

routes/product.jsx<p>Názov: {product.name ? product.name : <i>nepomenovaný</i>}</p>
<p>Cena: {product.cost ? product.cost : <i>neznáma</i>}</p>
<p>Množstvo: {product.amount ? product.amount : <i>neznáme</i>}</p>

Zostáva nám otvoriť main.jsx a pridať tam import loader, nazvime ho productLoader:

main.jsximport Product, {
  loader as productLoader,
} from './routes/product';

A zapísať ho ako načítač pre objekt trasy stránky s produktom, pridaním do children po vlastnosti element:

main.jsxchildren: [
  {
    path: 'products/:productId',
    element: <Product />,
    loader: productLoader,
  },
],

To je všetko, so načítaním údajov pre stránku produktu sme sa vyrovnali! Pravda, načítavať zatiaľ nemáme čo. Spustite aplikáciu, pridajte produkty a klikajte na ne v zozname, aby ste sa presvedčili, že všetko funguje.

Задание 1

Vezmite aplikáciu vytvorenú vami v úlohách k predchádzajúcim lekciám. Použitím materiálov z lekcie implementujte loader, pripojte ho, použite údaje z neho pre stránku so študentom.