⊗jsrtPmRtGLDP 36 of 47 menu

Dobijanje podataka loader-a preko URL parametara u React Router-u

U prethodnoj lekciji napisali smo funkciju za dobijanje podataka stranice proizvoda, hajde da importujemo getProduct u fajlu product.jsx:

import { getProduct } from '../forStorage';

Napišimo funkciju loader-a loader odmah nakon importa i pre funkcije Product. Prosledimo joj URL parametre:

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

Takođe, importujmo hook useLoaderData za korišćenje podataka dobijenih loader-om:

import { useLoaderData } from 'react-router-dom';

Primenimo useLoaderData, shodno tome zamenivši liniju sa kreiranjem objekta product na početku funkcije Product sledećom:

const { product } = useLoaderData();

I, naravno, promenićemo malo naš markup, pošto smo uklonili stari objekat product. Zamenimo sadržaj paragrafa:

<p>Naziv: {product.name}</p> <p>Cena: {product.cost}</p> <p>Količina: {product.amount}</p>

Sledećim:

<p>Naziv: {product.name ? product.name : <i>bez imena</i>}</p> <p>Cena: {product.cost ? product.cost : <i>nepoznata</i>}</p> <p>Količina: {product.amount ? product.amount : <i>nepoznata</i>}</p>

Ostaje nam da otvorimo main.jsx i tamo dodamo import loader, nazvaćemo ga productLoader:

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

I da ga definišemo kao loader za objekat rute stranice sa proizvodom, dodavši ga u children nakon svojstva element:

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

To je sve, sa učitavanjem podataka za stranicu proizvoda smo završili! Istina, nemamo šta da učitamo. Pokrenite aplikaciju, dodajte nekoliko proizvoda i kliknite na njih u listi, kako biste se uverili da sve funkcioniše.

Uzmite aplikaciju koju ste kreirali u zadacima za prethodne lekcije. Koristeći materijale lekcije, implementirajte loader, povežite ga, iskoristite podatke iz njega za stranicu sa studentom.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij