⊗jsrxPmATRS 50 of 57 menu

Použitie stavu požiadavky v Reduxe

Na predchádzajúcich hodinách sme pomocou dodatočných reduktorov opísali, čo má naša aplikácia robiť, ak fetchProducts pošle pri požiadavke akcie pending, fulfilled a rejected. Teraz môžeme zobraziť používateľovi, v akej fáze je aktuálne sťahovanie údajov.

Otvorme našu aplikáciu s produktmi a v nej súbor ProductsList.jsx. Prvou vecou, ktorú urobíme, je vytvorenie samostatného komponentu pre kartu produktu ProductCard. Urobíme to hneď po riadkoch importu pred funkciou ProductsList. Ako prop mu odovzdáme product:

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

A teraz do prázdnych okrúhlych zátvoriek return presunieme celý kód pre zobrazenie údajov produktu z 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> ) }

A odstránime v ProductsList zostávajúci riadok kódu. Ten už nepotrebujeme:

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

A teraz na začiatku kódu funkcie ProductsList zavedieme ešte pár premenných, error a content. Prvá bude pre chybu, do druhej budeme zapisovať rôzny obsah v závislosti od stavu požiadavky. Urobíme to pred const dataFetch = useRef(false):

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

Teraz pred príkazom return komponentu ProductsList napíšeme blok kódu s podmienkami, pri ktorých sa do content bude zapísať rôzny obsah v závislosti od stavu. Prvý opíšeme stav 'in progress' - keď je naša požiadavka odoslaná. V tomto prípade oznámime používateľovi, že prebieha sťahovanie údajov:

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

Ak naše sťahovanie prebehlo úspešne (označili sme to ako 'success'), potom musíme zobraziť zoznam získaných produktov. Zobrazíme ho v map pomocou komponentu ProductCard, ktorému propom odovzdáme 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} /> )) }

A posledný stav, ktorý máme - to je 'fail'. Pridajme aj ten. Použijeme tu premennú error, do ktorej sme vyššie zapísali chybu zo stavu:

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

A posledným krokom v bloku kódu pre return nahradíme starý {dispProducts} na {content}.

Spustíme našu aplikáciu, klikneme v menu na 'Products'. Všetko funguje. Vidíme, že približne 2 sekundy (ako sme nastavili na serveri) máme pod formulárom pridania produktu správu 'Products list loading ...', a potom sa objaví zoznam produktov.

Otvorte vašu aplikáciu so študentmi. Otvorte v nej súbor StudentsList.jsx. Vytvorte v ňom nový komponent StudentCard. Presuňte do neho kód z dispStudents, ako je ukázané v lekcii.

Vytvorte vo funkcii StudentsList premenné error a content. Priraďte premennej content obsah v závislosti od stavu požiadavky. Ne zabudnite nahradiť vo vracanej verzii starý dispStudents na 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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť