⊗jsrxPmATRS 50 of 57 menu

Bruk av forespørselsstatus i Redux

På tidligere timer brukte vi ekstra reducere for å beskrive hva applikasjonen vår skal gjøre hvis fetchProducts sender handlingene pending, fulfilled og rejected under en forespørsel. Nå kan vi vise brukeren på hvilket stadium datahentingen befinner seg.

La oss åpne applikasjonen vår med produkter, og i den filen ProductsList.jsx. Det første vi gjør er å opprette en separat komponent for produktkortet ProductCard. Vi gjør dette rett etter importsetningene før funksjonen ProductsList. Vi sender product til den som en prop:

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

Og nå i de tomme runde parentesene return flytter vi all koden for visning av produktdata fra 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> ) }

Og vi fjerner den gjenværende linjen i ProductsList. Vi trenger den ikke lenger:

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

Og nå i starten av koden til funksjonen ProductsList oppretter vi et par variabler til, error og content. Den første vil være for feil, i den andre vil vi skrive ulikt innhold avhengig av forespørselsstatusen. Vi gjør dette før const dataFetch = useRef(false):

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

Nå før return-kommandoen i ProductsList-komponenten skriver vi en kodeblokk med betingelser, der content vil få ulikt innhold avhengig av status. Først beskriver vi statusen 'in progress' - når forespørselen vår er sendt. I dette tilfellet vil vi informere brukeren om at data lastes:

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

Hvis lasting var vellykket (vi betegnet dette som 'success'), må vi vise listen over mottatte produkter. Vi viser den i map ved hjelp av komponenten ProductCard, som vi sender product som en prop til:

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

Og den siste statusen vi har - dette er 'fail'. La oss legge den til. Vi bruker her variabelen error, som vi ovenfor skrev feilen til fra staten:

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

Og som siste steg erstatter vi i kodeblokken for return den gamle {dispProducts} med {content}.

La oss starte applikasjonen vår, klikk i menyen på 'Products'. Alt fungerer. Vi ser at i omtrent 2 sekunder (som vi satte på serveren) henger det en melding under produktleggingsskjemaet 'Products list loading ...', og deretter dukker produktlisten opp.

Åpne applikasjonen din med studenter. Åpne filen StudentsList.jsx i den. Opprett en ny komponent StudentCard i den. Flytt koden fra dispStudents til den, som vist i leksjonen.

Opprett variablene error og content i funksjonen StudentsList. Tilordne variabelen content innhold avhengig av forespørselsstatusen. Ikke glem å erstatte i den returnerte oppstillingen den gamle dispStudents med content.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis