⊗jsrxPmATRS 50 of 57 menu

Користење на статусот на барањето во Redux

На претходните часови ние со помош на дополнителни редуцери опишавме што треба да прави нашата апликација, ако fetchProducts испраќа при барањето акции pending, fulfilled и rejected. Сега можеме да му ја прикажеме на корисникот на која фаза се моментално преземањето на податоците.

Ајде да ја отвориме нашата апликација со производи, а во неа датотеката ProductsList.jsx. Првото нешто што ќе го направиме е да создадеме посебен компонент за картичката на производот ProductCard. Ќе го направиме ова веднаш по линиите за импорт пред функцијата ProductsList. Како пропс ќе му го пренесеме product:

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

А сега во празните заградни return ќе го пренесеме целиот код за прикажување на податоците за производот од 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> ) }

И ќе ја отстраниме во ProductsList преостанатата линија код. Таа веќе не ни треба:

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

А сега на почетокот на кодот на функцијата ProductsList ќе дефинираме уште неколку променливи, error и content. Првата ќе биде за грешка, во втората ќе запишуваме различна содржина во зависност од статусот на барањето. Ќе го направиме ова пред const dataFetch = useRef(false):

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

Сега пред командата return на компонентот ProductsList ќе напишеме блок код со услови, при кои во content ќе се внесува различна содржина во зависност од статусот. Прво ќе го опишеме статусот 'in progress' - кога нашето барање е испратено. Во овој случај ќе му известиме на корисникот дека се вчитуваат податоците:

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

Ако нашето вчитување помина успешно (ние го означивме ова како 'success'), тогаш треба да го прикажеме листата на добиени производи. Ќе го прикажеме во map со помош на компонентот ProductCard, на кој како пропс ќе му го пренесеме product:

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

И последниот статус што го имаме - ова е 'fail'. Ќе го додадеме и него. Ќе ја искористиме овде променливата error, во која погоре ја запишавме грешката од состојбата:

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

И како последен чекор ние во блокот код за return ќе го замениме стариот {dispProducts} со {content}.

Ќе ја пуштиме нашата апликација, ќе кликнеме во менито на 'Products'. Сè работи. Гледаме, deка околу 2 секунди (како што го поставивме на серверот) под формата за додавање производ виси натписот 'Products list loading ...', a потоа се појавува листата на производи.

Отворете ја вашата апликација со студенти. Отворете ја во неа датотеката StudentsList.jsx. Создадете во неа нов компонент StudentCard. Пренесете го во него кодот од dispStudents, како што е прикажано на лекцијата.

Создадете во функцијата StudentsList променливите error и content. Доделете им на променливата content содржина во зависност од статусот на барањето. Не заборавајте да го замените во вратената верстка стариот dispStudents со content.

Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј