⊗jsrxPmATRS 50 of 57 menu

Reduxда сўров статусини қўллаш

Олдинги дарсларда биз қўшимча редьюсерлар ёрдамида иловамизга нима қилиш кераклигини тасвирладик, агар fetchProducts сўров жараёнида экшенлар pending, fulfilled ва rejected ни юборса. Энди биз фойдаланувчига маълумотлар юкланмоқда бўлган боскични кўрсатишимиз мумкин.

Келинг, маҳсулотлар билан иловамизни ochамиз, унда ProductsList.jsx файлини ochамиз. Биринчи бўлиб, биз маҳсулот карточкаси учун алохида компонент яратамиз ProductCard. Буни импорт сатрларидан кейин darhol 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 функсияси коди бошланишида янги ўзгарuvчилар, error ва content ни киритамиз. Биринчиси хato учун бўлади, иккинчисига биз сўров статусига қараб турли контентни ёзамиз. Буни const dataFetch = useRef(false) олдида қиламиз:

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

Энди ProductsList компонентининг return буйруги олдида шартлар билан код блокини ёзамиз, унда 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 ўзгарuvчисини ишлатамиз, унга биз юқорида стейтдан хatони ёзган эдик:

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' ни босамиз. Ҳаммаси ишлайди. Кўрамизки, тахминан 2 сония (серверда ўрнатганимиздек) маҳсулот қўшиш форми остида 'Products list loading ...' ёзиви осилиб турибди, сўнгра маҳсулотлар рўйхати пайдо бўлади.

Ўқувчилар билан иловангизни ochинг. Унда StudentsList.jsx файлини ochинг. Унда янги компонент яратинг StudentCard. Унга dispStudents дан кодни кўчиринг, дарсда кўрсатилганидек.

StudentsList функсиясида error ва content ўзгарuvчиларини киритинг. content ўзгарuvчисига сўров статусига қараб контентни тенгланг. Қайтариладиган версткада эски dispStudents ни content га алмаштиришни унутмангиз.

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