⊗jsrxPmRDDA 33 of 57 menu

การส่ง action ในแอปพลิเคชัน Redux

ตอนนี้เรามี reducer สำหรับอัปเดต slice รีแอคชันแล้ว ขั้นตอนต่อไปคือการเพิ่มการส่ง action ที่จะทำงานเมื่อผู้ใช้คลิกที่ปุ่มรีแอคชัน แต่ก่อนที่ทุกอย่างจะทำงานได้สมบูรณ์ เราจำเป็นต้องทำการเปลี่ยนแปลงสองสามอย่าง

มาเปิดแอปพลิเคชันสินค้าของเรา และในนั้นเปิดไฟล์ productsSlice.js มาดูที่นิยามของ initialState เห็นไหม? ในออบเจ็กต์ไม่มีคุณสมบัติรีแอคชัน มาแก้ไขกันโดยตั้งค่าตัวนับของแต่ละรีแอคชันเป็น 0:

{ id: '1', title: 'Product1', desc: 'This is an amazing product', price: '300', amount: '30', reactions: { good: 0, soso: 0, bad: 0, }, },

ในออบเจ็กต์ที่สองสำหรับการเริ่มต้น ให้เพิ่มคุณสมบัติ reactions ด้วยตัวเอง นอกจากนี้เรายังต้องเพิ่มคุณสมบัตินี้ในโค้ดสำหรับ reducer productAdded ด้านล่างด้วย เพื่อให้สินค้าใหม่มีฟังก์ชันการทำงานนี้เช่นกัน มาทำกันในเมธอด prepare ของมัน:

prepare(title, desc, price, amount, sellerId) { return { payload: { id: nanoid(), title, desc, price, amount, seller: sellerId, reactions: { good: 0, soso: 0, bad: 0, }, }, } },

ตอนนี้มาดูการส่ง action กัน เปิดไฟล์ UserReactions.jsx จากนั้นนำเข้า hook useDispatch และ reactionClicked:

import { useDispatch } from 'react-redux' import { reactionClicked } from './productsSlice'

ในส่วนต้นของโค้ดภายในฟังก์ชัน UserReactions บรรทัดแรก (ก่อน const userReactions ... ) ให้เขียน:

const dispatch = useDispatch()

และเพิ่มการส่ง reactionClicked เมื่อคลิกที่ปุ่มรีแอคชัน โดยเราจะส่ง id ของสินค้าและชื่อรีแอคชันที่ถูกคลิก:

<button key={name} type="button" className="reaction-button" onClick={() => dispatch(reactionClicked({ productId: product.id, reaction: name })) } > {image} {product.reactions[name]} </button>

สิ่งที่เหลืออยู่ตอนนี้คือการแสดงคอมโพเนนต์รีแอคชันในโครงร่างสำหรับหน้าของเรา มาทำกันในไฟล์ ProductsList.jsx ก่อนเอลิเมนต์ Link:

<UserReactions product={product} />

และเช่นเดียวกัน ก่อนเอลิเมนต์ Link ในหน้าสินค้าในไฟล์ ProductPage.jsx:

<UserReactions product={product} />

ตอนนี้เมื่อทุกอย่างเข้าที่แล้ว เราสามารถเรียกใช้แอปพลิเคชันของเราได้ ลองคลิกที่ปุ่มรีแอคชันดู เราสามารถเพิ่มสินค้าใหม่และกดปุ่มเหล่านั้นได้เช่นกัน ตอนนี้ไม่ว่าเราจะคลิกที่ปุ่มรีแอคชันที่ใด ค่าที่เปลี่ยนแปลงจะแสดงสำหรับสินค้านั้นในทุกหน้า ดูหน้าสินค้าแต่ละรายการ (ที่คุณคลิกรีแอคชัน) และหน้ารายการสินค้า และในทางกลับกัน สำหรับทุกหน้า จำนวนรีแอคชันสำหรับสินค้าเฉพาะจะเหมือนกัน

บทเรียนนี้เป็นบทเรียนสุดท้ายในบทเกี่ยวกับการทำงานกับข้อมูลใน Redux เราได้ทำงานกับข้อมูลใน Redux store อย่างลึกซึ้งมากขึ้น และตอนนี้รู้วิธีเพิ่มฟังก์ชันการทำงานที่จำเป็นในแอปพลิเคชันและใช้ข้อมูลใน React components แล้ว

เปิดแอปพลิเคชันนักเรียนของคุณ ในไฟล์ studensSlice.js ให้เพิ่มคุณสมบัติ votes พร้อมฟิลด์ที่เกี่ยวข้องให้กับออบเจ็กต์สำหรับการเริ่มต้น ทำสิ่งนี้สำหรับ reducer studentAdded ด้วย

ภายในฟังก์ชัน UserVotes ในไฟล์ UserVotes.jsx ให้สร้าง dispatch สำหรับ hook useDispatch และทำการส่ง action voteClicked เมื่อคลิกที่ปุ่มโหวต ส่ง id ของนักเรียนและชื่อ vote ให้กับมัน เช่นเดียวกับที่แสดงในบทเรียน

แสดงปุ่มสำหรับการโหวตในโครงร่างสำหรับคอมโพเนนต์ StudentsList และ StudentPage

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