⊗jsrxPmATRS 50 of 57 menu

Penerapan Status Permintaan di Redux

Pada pelajaran sebelumnya kita dengan menggunakan reducer tambahan mendeskripsikan apa yang harus dilakukan aplikasi kita, jika fetchProducts mengirim saat permintaan action pending, fulfilled dan rejected. Sekarang kita dapat menunjukkan kepada pengguna pada tahap mana saat ini pengunduhan data.

Mari buka aplikasi kita dengan produk, dan di dalamnya file ProductsList.jsx. Pertama, yang akan kita lakukan adalah membuat komponen terpisah untuk kartu produk ProductCard. Lakukan ini segera setelah baris impor sebelum fungsi ProductsList. Sebagai props kita berikan kepadanya product:

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

Dan sekarang di dalam tanda kurung bundar kosong return pindahkan semua kode untuk menampilkan 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 hapus di ProductsList baris kode yang tersisa. Itu tidak kita perlukan lagi:

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

Dan sekarang di awal kode fungsi ProductsList buat beberapa variabel lagi, error dan content. Yang pertama untuk error, ke dalam yang kedua kita akan menuliskan konten tertentu tergantung pada status permintaan. Lakukan ini sebelum const dataFetch = useRef(false):

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

Sekarang sebelum perintah return komponen ProductsList tulis blok kode dengan kondisi, di mana ke dalam content akan dimasukkan konten tertentu tergantung pada status. Pertama kita akan mendeskripsikan status 'in progress' - ketika permintaan kita terkirim. Dalam hal ini kita akan memberi tahu pengguna bahwa data sedang diunduh:

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

Jika pengunduhan kita berhasil (kita menandainya sebagai 'success'), maka kita perlu menampilkan daftar produk yang didapat. Tampilkan dalam map dengan menggunakan komponen ProductCard, yang kita berikan props 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} /> )) }

Dan status terakhir yang kita miliki - adalah 'fail'. Tambahkan juga. Gunakan di sini variabel error, yang telah kita tulis di atas error dari state:

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

Dan langkah terakhir kita di blok kode untuk return ganti {dispProducts} lama dengan {content}.

Jalankan aplikasi kita, klik di menu pada 'Products'. Semua berfungsi. Kita lihat, bahwa sekitar 2 detik (seperti yang kita atur di server) di bawah form penambahan produk terlihat tulisan 'Products list loading ...', dan kemudian muncul daftar produk.

Buka aplikasi Anda dengan siswa. Buka di dalamnya file StudentsList.jsx. Buat di dalamnya komponen baru StudentCard. Pindahkan ke dalamnya kode dari dispStudents, seperti yang ditunjukkan dalam pelajaran.

Buat dalam fungsi StudentsList variabel error dan content. Berikan variabel content konten tergantung pada status permintaan. Jangan lupa untuk mengganti di markup yang dikembalikan dispStudents lama dengan content.

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