⊗jsrxPmRDEF 24 of 57 menu

แบบฟอร์มสำหรับแก้ไขข้อมูลใน Redux

ตอนนี้เรามี reducer สำหรับการเปลี่ยนแปลง ข้อมูลใน store แล้ว ในบทเรียนนี้เราจะสร้าง แบบฟอร์ม ที่เราสามารถใช้เพื่อ แก้ไขข้อมูลผลิตภัณฑ์ได้

มาเปิดแอปพลิเคชันผลิตภัณฑ์ของเรา และสร้างไฟล์ EditProductForm.jsx ในโฟลเดอร์ products การสร้างคอมโพเนนต์ EditProductForm จะคล้ายกับ NewProductForm ยกเว้นข้อแตกต่างบางประการ ที่เราจะหยุดพูดถึง ดังนั้น คัดลอกโค้ดทั้งหมดจาก NewProductForm.jsx และวางลงในไฟล์ที่สร้างไว้ EditProductForm.jsx ตอนนี้มาเริ่มตามลำดับ

นำ nanoid ออกจากส่วน import ที่นี่เราไม่ จำเป็นต้องสร้าง id แทนที่การ import productAdded ด้วย productUpdated เพราะ ที่นี่เราจะใช้ action สำหรับการอัปเดต ไม่ใช่สำหรับการเพิ่ม ผลิตภัณฑ์

ต่อไปเปลี่ยนชื่อฟังก์ชันของ คอมโพเนนต์ของเราจาก NewProductForm เป็น EditProductForm

ก่อนที่เราจะกำหนด local state ในฟังก์ชัน EditProductForm สำหรับ name, desc, price และ amount มาเพิ่มโค้ดอีกไม่กี่บรรทัด อย่างที่เราได้กล่าวไปก่อนหน้านี้ ที่นี่เราไม่จำเป็นต้องสร้าง id ตอนนี้ ภารกิจของเราได้มาจากข้อมูลของผลิตภัณฑ์ที่ต้องการเปลี่ยน เราเคยทำแบบนี้ตอนสร้าง หน้าแยกสำหรับผลิตภัณฑ์ เอาล่ะ รับ id โดยใช้ hook useParams แล้วหาผลิตภัณฑ์ที่เราต้องการ โดยใช้ hook useSelector (อย่าลืม import hook ทั้งสองที่จุดเริ่มต้นของไฟล์):

let params = useParams() const { productId } = params const product = useSelector((state) => state.products.find((product) => product.id === productId) )

หลังจากนั้นเปลี่ยนบล็อกที่ประกาศ local state ตอนนี้เราจำเป็นต้อง กำหนดค่าตั้งต้นจาก ข้อมูลผลิตภัณฑ์ที่ได้รับจาก store นี่คือลักษณะของ state แรก โปรดปรับเปลี่ยนอีกสามรายการที่เหลือด้วยตัวคุณเอง:

const [name, setName] = useState(product.name)

หลังจากการกำหนดตัวแปรสำหรับ useDispatch มาเพิ่มโค้ดอีกหนึ่งบรรทัด คราวนี้สำหรับ hook useNavigate เราจะ ใช้มันเพื่อกลับไปที่หน้าผลิตภัณฑ์ เมื่อผู้ใช้บันทึก การเปลี่ยนแปลงที่ทำในแบบฟอร์ม:

const navigate = useNavigate()

และอย่าลืม import hook นี้ที่จุดเริ่มต้นของไฟล์:

import { useNavigate, useParams } from 'react-router-dom'

ต่อไปเรามีตัวจัดการสำหรับ ช่องป้อนข้อมูล หลังจากนั้นเราจำเป็นต้อง ปรับฟังก์ชัน onSaveProductClick ตอนนี้ในฟังก์ชันนี้เมื่อคลิกเราจะส่ง action productUpdated พร้อมกับ id ที่ได้รับ และข้อมูลที่เปลี่ยนแปลงในรูปแบบของออบเจ็กต์ หลังจากนั้นเพิ่ม navigate ของเรา สำหรับการไปยัง หน้าผลิตภัณฑ์ที่ถูกเปลี่ยนแปลง:

const onSaveProductClick = () => { if (name && desc && price && amount) { dispatch( productUpdated({ id: productId, name, desc, price, amount, }) ); navigate(`/products/${productId}`); } }

สิ่งที่เหลืออยู่คือใน JSX ที่คืนกลับมาหาบรรทัด:

<h2>Add a New Product</h2>

และแทนที่ด้วย:

<h2>Edit Product</h2>

เปิดแอปพลิเคชันนักเรียนของคุณ สร้างไฟล์ EditStudentForm.jsx โดย ทำตามวิธีเดียวกันกับ NewStudentForm.jsx นำ การเปลี่ยนแปลงเข้าไป ตามที่แสดงในบทเรียน

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