⊗jsrxPmATRS 50 of 57 menu

Uporaba statusa zahteve v Redux

V prejšnjih urah smo z dodatnimi reducerji opisali, kaj naj stori naša aplikacija, če fetchProducts pošlje ob zahtevi akcije pending, fulfilled in rejected. Zdaj lahko uporabniku pokažemo, na kateri stopnji je trenutno nalaganje podatkov.

Odprimo našo aplikacijo s produkti in v njej datoteko ProductsList.jsx. Prva stvar, ki jo bomo naredili, je ustvarjanje ločene komponente za kartico produkta ProductCard. To naredimo takoj za vrsticami uvozov pred funkcijo ProductsList. Kot props mu posredujemo product:

const ProductCard = ({ product }) => { return () }

In zdaj v prazne okrogle oklepaje return prenesemo vso kodo za prikaz podatkov produkta iz dispProducts:

const ProductCard = ({ product }) => { return ( <div key={product.id} className="product-excerpt"> <h3>{product.name}</h3> <SellerOfProd sellerId={product.seller} /> <p>{product.desc.substring(0, 100)}</p> <UserReactions product={product} /> <Link to={`/products/${product.id}`} className="link-btn"> view </Link> </div> ) }

In v ProductsList odstranimo preostalo vrstico kode. Ni nam več potrebna:

const dispProducts = products.map((product) => ())

In zdaj na začetku kode funkcije ProductsList ustvarimo še nekaj spremenljivk, error in content. Prva bo za napako, v drugo bomo zapisovali to ali drugo vsebino glede na status zahteve. Naredimo to pred const dataFetch = useRef(false):

const error = useSelector((state) => state.products.error) let content

Zdaj pred ukazom return komponente ProductsList napišimo blok kode s pogoji, pri katerih se bo v content zapisovala ta ali druga vsebina glede na status. Prvi opišemo status 'in progress' - ko je naša zahteva poslana. V tem primeru sporočimo uporabniku, da poteka nalaganje podatkov:

if (productStatus === 'in progress') { content = <p>Products list loading ...</p> }

Če je naše nalaganje uspešno (smo to označili kot 'success'), potem moramo izpisati seznam prejetih produktov. Izpišimo ga z map s pomočjo komponente ProductCard, ki ji podamo props product:

if (productStatus === 'in progress') { content = <p>Products list loading ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) }

In zadnji status, ki ga imamo - to je 'fail'. Dodajmo še tega. Uporabimo tukaj spremenljivko error, v katero smo zgoraj zapisali napako iz stanja:

if (productStatus === 'in progress') { content = <p>Products list loading ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) } else if (productStatus === 'fail') { content = <div>{error}</div> }

In zadnji korak je, da v bloku kode za return zamenjamo stari {dispProducts} z {content}.

Zaženimo našo aplikacijo, kliknimo v meniju na 'Products'. Vse deluje. Vidimo, da približno 2 sekund (kot smo nastavili na strežniku) se nam pod obrazcem dodajanja produkta prikaže napis 'Products list loading ...', nato pa se prikaže seznam produktov.

Odprite vašo aplikacijo s študenti. Odprite v njej datoteko StudentsList.jsx. Ustvarite v njej novo komponento StudentCard. Prenesite vanjo kodo iz dispStudents, kot je prikazano v lekciji.

Ustvarite v funkciji StudentsList spremenljivki error in content. Dodelite spremenljivki content vsebino glede na status zahteve. Ne pozabite zamenjati v vračani kodi stari dispStudents z content.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni