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

Барномаи худро бо донишҷӯён кушоед. Дар он файли StudentsList.jsx-ро кушоед. Дар он компоненти нав эҷод кунед StudentCard. Рамзро аз dispStudents ба он гузаронед, ҳамчунон ки дар дарс нишон дода шудааст.

Дар функсияи StudentsList тағирёбандаҳои error ва content-ро эҷод кунед. Ба тағирёбандаи content муҳтаворо дар вобастагӣ ба статуси дархост муайян кунед. Фаромӯш накунед, ки дар верстаи баргардонидашуда 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çeЎзбекOʻzbekTiếng Việt
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан