⊗jsrxPmATRS 50 of 57 menu

Menggunakan Status Permintaan dalam Redux

Dalam pelajaran sebelumnya, kami menggunakan reducer tambahan untuk menerangkan apa yang perlu dilakukan oleh aplikasi kami jika fetchProducts menghantar aksi pending, fulfilled dan rejected semasa permintaan. Sekarang kami boleh menunjukkan kepada pengguna pada peringkat mana pemuatan data sedang berlaku.

Mari buka aplikasi produk kami, dan dalamnya fail ProductsList.jsx. Perkara pertama yang akan kami lakukan ialah mencipta komponen berasingan untuk kad produk ProductCard. Kami akan lakukan ini sejurus selepas barisan import sebelum fungsi ProductsList. Kami akan hantarkan product sebagai props kepadanya:

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

Dan sekarang dalam kurungan bulat kosong return kami akan pindahkan semua kod untuk memaparkan data produk dari 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> ) }

Dan kami akan buangkan dalam ProductsList barisan kod yang tinggal. Ia tidak diperlukan lagi:

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

Dan sekarang pada permulaan kod fungsi ProductsList kami akan sediakan beberapa pembolehubah lagi, error dan content. Yang pertama adalah untuk ralat, yang kedua kami akan masukkan kandungan yang berbeza bergantung pada status permintaan. Kami akan lakukan ini sebelum const dataFetch = useRef(false):

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

Sekarang sebelum arahan return komponen ProductsList tuliskan blok kod dengan syarat, di mana content akan dimasukkan kandungan yang berbeza bergantung pada status. Pertama kami akan terangkan status 'in progress' - apabila permintaan kami dihantar. Dalam kes ini kami akan maklumkan kepada pengguna bahawa data sedang dimuatkan:

if (productStatus === 'in progress') { content = <p>Senarai produk sedang dimuatkan ...</p> }

Jika pemuatan kami berjaya (kami menandakannya sebagai 'success'), maka kami perlu memaparkan senarai produk yang diperoleh. Kami akan paparkannya dalam map menggunakan komponen ProductCard, yang kami hantarkan product sebagai props:

if (productStatus === 'in progress') { content = <p>Senarai produk sedang dimuatkan ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) }

Dan status terakhir yang kami ada - ialah 'fail'. Tambahkannya. Gunakan di sini pembolehubah error, yang kami tulis di atas ralat dari state:

if (productStatus === 'in progress') { content = <p>Senarai produk sedang dimuatkan ...</p> } else if (productStatus === 'success') { content = products.map((product) => ( <ProductCard key={product.id} product={product} /> )) } else if (productStatus === 'fail') { content = <div>{error}</div> }

Dan langkah terakhir, dalam blok kod untuk return kami akan gantikan {dispProducts} yang lama dengan {content}.

Jalankan aplikasi kami, klik dalam menu pada 'Products'. Semua berfungsi. Kami lihat bahawa kira-kira 2 saat (seperti yang kami tetapkan di pelayan) terdapat tulisan 'Senarai produk sedang dimuatkan ...' di bawah borang tambahan produk, dan kemudian senarai produk muncul.

Buka aplikasi pelajar anda. Buka dalamnya fail StudentsList.jsx. Cipatakan di dalamnya komponen baru StudentCard. Pindahkan kod daripadanya dispStudents, seperti yang ditunjukkan dalam pelajaran.

Ciptakan dalam fungsi StudentsList pembolehubah error dan content. Berikan pembolehubah content kandungan bergantung pada status permintaan. Jangan lupa untuk menggantikan dalam susun atur yang dipulangkan dispStudents lama dengan content.

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak