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.
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.