⊗jsrxPmATRS 50 of 57 menu

Pieprasījuma statusa izmantošana Redux

Iepriekšējās nodarbībās mēs ar papildu reduceru palīdzību aprakstījām, ko mūsu lietotnei jādara, ja fetchProducts nosūta pieprasījuma laikā action pending, fulfilled un rejected. Tagad mēs varam parādīt lietotājam, kādā posmā pašlaik notiek datu ielāde.

Atvērsim mūsu produktu lietotni, un tajā failu ProductsList.jsx. Pirmā lieta, ko mēs darīsim, ir izveidot atsevišķu komponentu produktu kartītei ProductCard. Izveidosim to uzreiz pēc importa rindām pirms funkcijas ProductsList. Kā props padodam tam product:

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

Un tagad tukšajās apaļajās iekavās return pārvietosim visu kodu produkta datu attēlošanai no 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> ) }

Un noņemsim ProductsList atlikušo koda rindu. Tā mums vairs nav vajadzīga:

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

Un tagad koda sākumā funkcijā ProductsList izveidosim vēl pāris mainīgos, error un content. Pirmais būs kļūdai, otrajā mēs ierakstīsim to vai citu saturu atkarībā no pieprasījuma statusa. Izveidosim to pirms const dataFetch = useRef(false):

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

Tagad pirms komandas return komponenta ProductsList uzrakstīsim koda bloku ar nosacījumiem, kuros content tiks ielikts tas vai cits saturs atkarībā no statusa. Pirmo mēs aprakstīsim statusu 'in progress' - kad mūsu pieprasījums ir nosūtīts. Šajā gadījumā mēs paziņosim lietotājam, ka notiek datu ielāde:

if (productStatus === 'in progress') { content = <p>Produktu saraksta ielāde ...</p> }

Ja mūsu ielāde ir veiksmīga (mēs to apzīmējām kā 'success'), tad mums jāparāda saraksts ar iegūtajiem produktiem. Parādīsim to ar map palīdzību, izmantojot komponentu ProductCard, kuram kā props padodam product:

if (productStatus === 'in progress') { content = <p>Produktu saraksta ielāde ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) }

Un pēdējais statuss, kas mums ir - tas ir 'fail'. Pievienosim arī to. Izmantosim šeit mainīgo error, kurā mēs augstāk ierakstījām kļūdu no state:

if (productStatus === 'in progress') { content = <p>Produktu saraksta ielāde ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) } else if (productStatus === 'fail') { content = <div>{error}</div> }

Un pēdējā solī mēs koda blokā return aizvietosim veco {dispProducts} ar {content}.

Palaidīsim mūsu lietotni, noklikšķinām izvēlnē uz 'Products'. Viss darbojas. Redzam, ka aptuveni 2 sekundes (kā mēs iestatījām serverī) zem produkta pievienošanas formas karājas uzraksts 'Produktu saraksta ielāde ...', un pēc tam parādās produktu saraksts.

Atveriet savu studentu lietotni. Atveriet tajā failu StudentsList.jsx. Izveidojiet tajā jaunu komponentu StudentCard. Pārvietojiet tajā kodu no dispStudents, kā parādīts nodarbībā.

Izveidojiet funkcijā StudentsList mainīgos error un content. Piešķiriet mainīgajam content saturu atkarībā no pieprasījuma statusa. Ne aizmirstiet aizvietot atgriežamajā izkārtojumā veco dispStudents ar content.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt