⊗jsrxPmATRS 50 of 57 menu

Gebruik van Aanversoekstatus in Redux

In vorige lesse het ons met behulp van bykomende reducers beskryf wat ons toepassing moet doen, as fetchProducts aksies pending, fulfilled en rejected stuur tydens 'n versoek. Nou kan ons aan die gebruiker wys op watter stadium data laai tans is.

Kom ons maak ons produktoepassing oop, en daarin lêer ProductsList.jsx. Die eerste ding wat ons sal doen, is om 'n aparte komponent vir die produkkaart ProductCard te skep. Doen dit dadelik na die invoerlyne voor die funksie ProductsList. As 'n prop gee ons dit product:

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

En nou in die leë ronde hakies return skuif ons al die kode om produkdata te vertoon uit dispProducts oor:

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

En verwyder in ProductsList die oorblywende lyn kode. Ons het dit nie meer nodig nie:

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

En nou aan die begin van die funksie ProductsList se kode skep ons nog 'n paar veranderlikes, error en content. Die eerste sal vir die fout wees, in die tweede sal ons die een of ander inhoud aflê afhangende van die aanversoekstatus. Doen dit voor const dataFetch = useRef(false):

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

Nou voor die opdrag return van die komponent ProductsList skryf ons 'n blok kode met voorwaardes, waarvolgens in content die een of ander inhoud gestoor sal word afhangende van die status. Eerstens beskryf ons status 'in progress' - wanneer ons versoek gestuur is. In hierdie geval laat ons die gebruiker weet dat data laai:

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

As ons laai suksesvol was (ons het dit aangedui as 'success'), dan moet ons die lys van verkrygte produkte vertoon. Vertoon dit in map met behulp van die komponent ProductCard, aan wie ons as prop product sal gee:

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

En die laaste status wat ons het - is 'fail'. Voeg dit ook by. Gebruik hier die veranderlike error, waarin ons bo die fout van die staat geskryf het:

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

En die laaste stap is om in die blok kode vir return die ou {dispProducts} te vervang met {content}.

Laat ons toepassing loop, klik in die menu op 'Products'. Alles werk. Ons sien dat ongeveer 2 sekondes (soos ons op die bediener gestel het) onder die vorm byvoeging van produk hang die inskrywing 'Products list loading ...', en dan verskyn die produklys.

Maak jou studentetoepassing oop. Maak daarin lêer StudentsList.jsx oop. Skep daarin 'n nuwe komponent StudentCard. Skuif die kode uit dispStudents daarin oor, soos gewys in die les.

Skep in die funksie StudentsList veranderlikes error en content. Ken aan veranderlike content inhoud toe afhangende van die aanversoekstatus. Moenie vergeet om in die teruggestuurde opmaak die ou dispStudents met content te vervang nie.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp