⊗jsrxPmATRS 50 of 57 menu

Toepassing van de verzoekstatus in Redux

In eerdere lessen hebben we met behulp van aanvullende reducers beschreven wat onze applicatie moet doen, als fetchProducts tijdens het verzoek acties pending, fulfilled en rejected verstuurt. Nu kunnen we de gebruiker tonen in welk stadium de gegevensophaling zich momenteel bevindt.

Laten we onze productenapplicatie openen, en daarin het bestand ProductsList.jsx. Het eerste wat we doen, is een aparte component aanmaken voor de productkaart ProductCard. We doen dit direct na de importregels voor de functie ProductsList. We geven hem product mee als prop:

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

En nu verplaatsen we in de lege ronde haakjes van return alle code voor het weergeven van de productgegevens uit 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> ) }

En we verwijderen in ProductsList de overgebleven regel code. We hebben deze niet meer nodig:

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

En nu, aan het begin van de code van de functie ProductsList, maken we nog een paar variabelen aan, error en content. De eerste is voor de fout, in de tweede zullen we verschillende inhoud opslaan afhankelijk van de status van het verzoek. We doen dit vóór const dataFetch = useRef(false):

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

Nu schrijven we vóór de opdracht return van de component ProductsList een codeblok met voorwaarden, waarbij in content de ene of de andere inhoud wordt geplaatst, afhankelijk van de status. Als eerste beschrijven we de status 'in progress' - wanneer ons verzoek is verzonden. In dit geval informeren we de gebruiker dat de gegevens worden geladen:

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

Als ons laden succesvol is verlopen (we hebben dit aangeduid als 'success'), dan moeten we de lijst van verkregen producten weergeven. We geven deze weer in map met behulp van de component ProductCard, waaraan we product als prop doorgeven:

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 de laatste status die we hebben - is 'fail'. Laten we deze ook toevoegen. We gebruiken hier de variabele error, waarin we hierboven de fout uit de state hebben opgeslagen:

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 als laatste stap vervangen we in het codeblok voor return de oude {dispProducts} door {content}.

Laten we onze applicatie starten, klik in het menu op 'Products'. Alles werkt. We zien dat ongeveer 2 seconden (zoals we op de server hebben ingesteld) onder het formulier voor het toevoegen van een product de tekst 'Products list loading ...' hangt, en daarna verschijnt de productlijst.

Open je applicatie met studenten. Open daarin het bestand StudentsList.jsx. Maak er een nieuwe component aan StudentCard. Verplaats hiernaartoe de code uit dispStudents, zoals getoond in de les.

Maak in de functie StudentsList de variabelen error en content aan. Ken aan de variabele content inhoud toe afhankelijk van de status van het verzoek. Vergeet niet om in de geretourneerde opmaak de oude dispStudents te vervangen door content.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren