⊗jsrxPmATCDT 47 of 57 menu

การส่ง thunk จากคอมโพเนนต์ใน Redux

ในบทเรียนนี้เราจะส่ง thunk เพื่อดึง สินค้าจาก React component ProductsList

ตอนนี้เรามาเปิดแอปพลิเคชันสินค้าของเรา และในนั้นคือไฟล์ ProductsList.jsx เริ่มต้นด้วยการเพิ่มการนำเข้า thunk fetchProducts ที่เราสร้างขึ้น:

import { selectAllProducts, fetchProducts } from './productsSlice'

เรายังต้องการ hook useDispatch เพื่อส่ง action creator ของเรา และ hook useEffect เพราะที่นี่เรามี side effect, เนื่องจากเรากำลังจัดการกับ network และนั่นคือ API ภายนอกแล้ว:

import { useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux'

ตอนนี้บรรทัดแรกในโค้ดของฟังก์ชัน ProductsList ก่อนการประกาศ products ให้เพิ่ม:

const dispatch = useDispatch()

ต่อไปเมื่อดึงสินค้าจาก state เราจะดึงสถานะของคำขอออกมาด้วย:

const products = useSelector(selectAllProducts) const productStatus = useSelector((state) => state.products.status)

และทันทีหลังจากนั้น บอก React ด้วย hook useEffect ว่าหลังจากเรนเดอร์คอมโพเนนต์แล้ว เราจำเป็นต้องดึงสินค้า ที่นี่ เราจำเป็นต้องมีสถานะคำขอ เพราะ สิ่งสำคัญสำหรับเราคือให้คำขอดังกล่าวถูกส่ง เพียงครั้งเดียวเท่านั้น:

useEffect(() => { if (productStatus === 'idle') { dispatch(fetchProducts()) } }, [productStatus, dispatch])

ตอนนี้เราสามารถเรียกใช้แอปพลิเคชันของเราได้ คลิกที่ 'Products' ในเมนูด้านซ้าย เราจะยังไม่เห็นรายการสินค้า แต่ถ้า เราไปที่ Redux DevTools ของเรา ทางด้านซ้าย ของหน้าต่างจะมี action ที่สร้างขึ้น โดยอัตโนมัติ (ตามที่ฉันบอกไว้ในบทเรียนที่แล้ว) คือ products/fetchProducts/pending และ fulfilled ตอนนี้มาคลิกที่ action products/fetchProducts/fulfilled และที่ฟิลด์ payload ของมัน - นั่นคือรายการสินค้าของเรา! เยี่ยม ทุกส่วนในห่วงโซ่ของเรา - เซิร์ฟเวอร์ ฐานข้อมูล ไคลเอ็นต์ และ Redux - แอปพลิเคชันทำงานประสานกันและร่วมกัน อีกอย่าง อย่างที่คุณเห็นที่นี่ยังมีคุณสมบัติ meta ซึ่งเราเห็นสถานะของคำขอ

มาสังเกตอีกสิ่งหนึ่ง คุณ อาจมีกรณีที่ pending และ ดังนั้น fulfilled จะ แสดงสองครั้ง หากเป็นเช่นนั้น ก็ไม่ต้องเสียใจ เราจะพูดถึงเรื่องนี้ ในภายหลัง

เปิดแอปพลิเคชันนักเรียนของคุณ เปิดไฟล์ StudentsList.jsx ในนั้น นำเข้า hook ที่จำเป็นและ thunk ตามเนื้อหาจากบทเรียน

หลังจากศึกษาบทเรียนแล้ว ให้ดึง สถานะคำขอ studentStatus จากนั้น ใช้ useEffect ส่ง fetchStudents เฉพาะเมื่อเงื่อนไขว่า ค่า studentStatus คือ 'idle'

เรียกใช้แอปพลิเคชันของคุณ คลิก ที่ 'Students' ในเมนูด้านซ้ายของแอปพลิเคชัน จากนั้นเรียกใช้ส่วนขยาย Redux DevTools ในเบราว์เซอร์ เช่นเดียวกับในบทเรียนนี้ คุณควรเห็น action พร้อม pending และ fulfilled (และในนั้น payload พร้อม นักเรียน) ลองสำรวจแท็บต่าง ๆ ของส่วนขยาย

ไทย
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
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ