⊗jsrxPmRDARR 32 of 57 menu

การเพิ่มรีดิวเซอร์ลงในแอปพลิเคชัน Redux

ในบทเรียนที่แล้ว เราได้สร้างคอมโพเนนต์ UserReaction เพื่อให้แต่ละ ผลิตภัณฑ์มีปฏิกิริยาจากผู้ใช้ด้วย ตอนนี้เราจำเป็นต้องเขียนรีดิวเซอร์ ซึ่งจะจัดการกับตัวนับ ปฏิกิริยาเมื่อผู้ใช้คลิก ปุ่มปฏิกิริยาต่างๆ

มาเปิดแอปพลิเคชันผลิตภัณฑ์ของเรา และในนั้นเปิดไฟล์ productsSlice.js ที่มี รีดิวเซอร์ทั้งหมด ตอนนี้ในคุณสมบัติ reducers มาสร้างรีดิวเซอร์เพิ่มอีกหนึ่งตัวคือ reactionClicked (เราสามารถวางมันไว้แรกสุด - ก่อน productAdded, แม้ว่ามันจะไม่สำคัญ) ตามปกติ ส่ง พารามิเตอร์ state และ action ให้มัน:

reactionClicked(state, action) {},

และตอนนี้ภายในวงเล็บปีกกา ซึ่งเรา ปล่อยว่างไว้ในขั้นตอนก่อนหน้า มาเขียน โค้ดสำหรับมันกัน ประการแรก เราจะแยก id ผลิตภัณฑ์ จาก payload ของอ็อบเจ็กต์ action และ ชื่อปฏิกิริยา:

const { productId, reaction } = action.payload

จากนั้นจากสเตทที่ส่งมา ให้ได้ผลิตภัณฑ์ ที่ต้องการ:

const currentProduct = state.find(product => product.id === productId)

และหากมีผลิตภัณฑ์ดังกล่าว ให้เพิ่ม ค่าของปฏิกิริยาที่ส่งมา ขึ้น 1:

if (currentProduct) { currentProduct.reactions[reaction]++ }

เพียงเท่านี้ โค้ดของเรา สำหรับ reactionClicked ก็พร้อม:

reactionClicked(state, action) { const { productId, reaction } = action.payload const currentProduct = state.find(product => product.id === productId) if (currentProduct) { currentProduct.reactions[reaction]++ } },

มาเพิ่มการส่งออก action creator ที่ได้ท้ายไฟล์:

export const { reactionClicked, productAdded, productUpdated } = productsSlice.actions

มีสองประเด็นสำคัญที่ต้องทราบไว้ ดังที่คุณจำได้จากบทเรียนก่อนหน้า - การอัปเดต ค่าโดยตรงในโค้ดรีดิวเซอร์แบบนี้ ไม่ได้รับอนุญาต (ดูที่บรรทัดนี้: reactions[reaction]++) แต่เราสามารถทำได้เพราะเราทำมัน ภายใน createSlice ซึ่งใช้ ไลบรารี Immer มันจะจัดการให้ แปลงโค้ดของเราเป็นการอัปเดต ค่าแบบ "ปลอดภัย" สิ่งนี้ทำให้เราเขียนสิ่ง ซับซ้อนได้ด้วยวิธีที่ง่ายขึ้น

สิ่งต่อไปที่ต้องจำ - อ็อบเจ็กต์ action ควรมีข้อมูล น้อยที่สุดเท่าที่เป็นไปได้ - เพียงเพื่อ ระบุว่าเกิดอะไรขึ้น อย่าทำ การคำนวณใดๆ ไว้ในนั้น การคำนวณทั้งหมดสำหรับ การอัปเดตสเตทควรทำในรีดิวเซอร์ คุณสามารถเขียนตรรกะสำหรับสิ่งนี้ ได้เท่าที่ต้องการที่นี่

เปิดแอปพลิเคชันนักเรียนของคุณ และในไฟล์ studentsSlice.js ให้เพิ่ม รีดิวเซอร์อีกหนึ่งตัวคือ voteClicked ใน ฟิลด์ reducers ตามที่แสดงในบทเรียน เขียนโค้ดสำหรับมัน งานของ รีดิวเซอร์ของคุณ - เมื่อคลิกให้เพิ่มค่า vote (หรือเสียงโหวต) ที่ถูกคลิก สำหรับนักเรียนนั้น ขึ้น 1

ท้ายไฟล์ อย่าลืมส่งออก action creator voteClicked ที่ได้

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