⊗jsrxPmATRS 50 of 57 menu

Primena statusa zahteva u Redux-u

Na prethodnim časovima smo uz pomoć dodatnih reduser-a opisali šta da radi naša aplikacija, ako fetchProducts šalje pri zahtevu akcije pending, fulfilled i rejected. Sada možemo da pokažemo korisniku na kojoj je fazi trenutno učitavanje podataka.

Hajde da otvorimo našu aplikaciju sa proizvodima, a u njoj fajl ProductsList.jsx. Prvo šta ćemo uraditi jeste da napravimo poseban komponent za karticu proizvoda ProductCard. Uradimo to odmah nakon linija import-a pre funkcije ProductsList. Kao pros prosledićemo mu product:

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

A sada u prazne okrugle zagrade return prenesimo ceo kod za prikazivanje podataka proizvoda 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> ) }

I uklonimo u ProductsList preostalu liniju koda. Ona nam više nije potrebna:

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

A sada na početku koda funkcije ProductsList napišimo još par promenljivih, error i content. Prva će nam biti za grešku, u drugu ćemo upisivati ono ili ovo sadržaje u zavisnosti od statusa zahteva. Uradimo to pre const dataFetch = useRef(false):

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

Sada pre komande return komponenta ProductsList napišimo blok koda sa uslovima, pri kojima će u content biti upisivano ono ili ovo sadržaj u zavisnosti od statusa. Prvi ćemo opisati status 'in progress' - kada je naš zahtev poslat. U ovom slučaju obavestićemo korisnika, da se podaci učitavaju:

if (productStatus === 'in progress') { content = <p>Lista proizvoda se učitava ...</p> }

Ako se naše učitavanje izvršilo uspešno (označavali smo ovo kao 'success'), onda nam treba da prikažemo listu dobijenih proizvoda. Prikažimo ga u map uz pomoć komponenta ProductCard, kojemu pros prosledimo product:

if (productStatus === 'in progress') { content = <p>Lista proizvoda se učitava ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) }

I poslednji status, koji mi imamo - to je 'fail'. Dodajmo i njega. Koristimo ovde promenljivu error, u koju smo gore upisali grešku iz state-a:

if (productStatus === 'in progress') { content = <p>Lista proizvoda se učitava ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) } else if (productStatus === 'fail') { content = <div>{error}</div> }

I poslednjim korakom mi u bloku koda za return zamenimo stari {dispProducts} sa {content}.

Pokrenimo našu aplikaciju, kliknimo u meniju na 'Products'. Sve radi. Vidimo, da otprilike 2 sekundi (kao što smo i podesili na serveru) kod nas ispod forme dodavanja proizvoda visi natpis 'Products list loading ...', a onda se pojavi lista proizvoda.

Otvorite vašu aplikaciju sa studentima. Otvorite u njoj fajl StudentsList.jsx. Napravite u njemu novi komponent StudentCard. Prenesite u njega kod iz dispStudents, kao što je prikazano na času.

Napravite u funkciji StudentsList promenljive error i content. Dodelite promenljivoj content sadržaj u zavisnosti od statusa zahteva. Ne zaboravite da zamenite u vraćenoj strukturi stari dispStudents sa content.

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