⊗jsrxPmATRS 50 of 57 menu

Matumizi ya Hali ya Ombi katika Redux

Katika masomo yaliyopita, kwa kutumia reducers za ziada tulielezea nini programu yetu ifanye, kama fetchProducts inatuma vitendo pending, fulfilled na rejected wakati wa ombi. Sasa tunaweza kumwonyesha mtumiaji hatua gani upakiaji wa data uko sasa.

Wacha tufungue programu yetu ya bidhaa, na ndani yake faili ProductsList.jsx. Jambo la kwanza tutakalofanya, ni kuunda komponeneti tofauti kwa kadi ya bidhaa ProductCard. Tutafanya hii mara baada ya mistari ya kuingiza kabla ya kitendo ProductsList. Kama props tutampelekea product:

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

Na sasa kwenye mabano ya duara tupu return tutahamisha msimbo wote wa kuonyesha data ya bidhaa kutoka 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> ) }

Na tutaondoa kwenye ProductsList mstari uliobaki wa msimbo. Hatuihitaji tena:

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

Na sasa mwanzoni mwa msimbo wa kitendo ProductsList tutaweka vigezo vingine viwili, error na content. Ya kwanza itakuwa kwa makosa, ya pili tutaweka yaliyomo mbalimbali kulingana na hali ya ombi. Tutafanya hii kabla ya const dataFetch = useRef(false):

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

Sasa kabla ya amri return ya componeneti ProductsList tunaandika kipande cha msimbo na masharti, ambapo content utawekwa yaliyomo mbalimbali kulingana na hali. Ya kwanza tutaelezea hali 'in progress' - wakati ombi letu limetumwa. Katika kesi hii tutamwambia mtumiaji kuwa data inapakuliwa:

if (productStatus === 'in progress') { content = <p>Orodha ya bidhaa inapakuliwa ...</p> }

Kama upakiaji wetu umefanikiwa (tuliashiria hii kama 'success'), basi tunahitaji kuonyesha orodha ya bidhaa zilizopatikana. Tutaionyesha kwenye map kwa kutumia componeneti ProductCard, ambayo tutapeleka props product:

if (productStatus === 'in progress') { content = <p>Orodha ya bidhaa inapakuliwa ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) }

Na hali ya mwisho, ambayo tunayo - ni 'fail'. Tuiongeze pia. Tutumie hapa kigezo error, ambacho tulikiandika hapo juu kama kosa kutoka kwenye hali:

if (productStatus === 'in progress') { content = <p>Orodha ya bidhaa inapakuliwa ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) } else if (productStatus === 'fail') { content = <div>{error}</div> }

Na hatua ya mwisho, kwenye kipande cha msimbo cha return tutabadilisha {dispProducts} ya zamani kuwa {content}.

Wacha tuizindue programu yetu, bonyeza kwenye menyu kwa 'Products'. Yote inafanya kazi. Tunaona, kuwa takriban 2 sekunde (kama tulivyo weka kwenye seva) chini ya fomu ya kuongeza bidhaa kuna uandishi 'Orodha ya bidhaa inapakuliwa ...', na kisha orodha ya bidhaa inaonekana.

Fungua programu yako ya wanafunzi. Fungua ndani yake faili StudentsList.jsx. Unda ndani yake komponeneti mpya StudentCard. Hamisha ndani yake msimbo kutoka dispStudents, kama inavyoonyeshwa kwenye somo.

Unda katika kitendo StudentsList vigezo error na content. Kabidhi kigezo content yaliyomo kulingana na hali ya ombi. Usisahau kubadilisha kwenye muundo unaorudishwa dispStudents ya zamani kuwa content.

Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa