ฉันกำลังทำงานกับออบเจ็กต์สถานะแบบซ้อนที่ฉันอัปเดตด้วยฟังก์ชัน onChange เช่น:
const [someState, setSomeState] = useState({
customer: [
{
name: "Bob",
address: "1234 Main Street",
email: "[email protected]",
phone: [
{
mobile: "555-5555",
home: "555-5555"
}
]
}
]
});
const updateSomeStatePhone = e => {
e.persist();
setSomeState(prevState => {
prevState.customer[0].phone[0].mobile = e.target.value;
return {
...prevState
};
});
};
<p>Update Mobile Number<p>
<select
value={someState.customer[0].phone[0].mobile}
onChange={updateSomeStatePhone}
>
<option value="123-4567">"123-4567"</option>
</select>
นี่จะทำให้เคล็ดลับเสร็จสิ้น อย่างไรก็ตาม ในปัจจุบัน หากฉันต้องการอัปเดตคุณสมบัติสถานะหลายรายการผ่านแบบฟอร์มขนาดใหญ่ที่มีฟิลด์ดรอปดาวน์/อินพุต ฯลฯ ฉันต้องฮาร์ดโค้ดตัวจัดการ onChange ที่แตกต่างกัน 6 ตัวสำหรับฟิลด์เหล่านั้น
แต่ฉันอยากให้มีตัวจัดการ onChange เพียงตัวเดียวและส่งผ่านสถานะจากฟิลด์แบบฟอร์มสำหรับทรัพย์สินของรัฐที่ฉันกำลังเปลี่ยนแปลง แต่ฉันไม่สามารถเข้าใจไวยากรณ์ได้:
const updateSomeState = (e, prop) => {
e.persist();
setSomeState(prevState => {
prevState.prop = e.target.value;
return {
...prevState
};
});
};
<p>Update Mobile Number<p>
<select
value={someState.customer[0].phone[0].mobile}
onChange={updateSomeState(e, prop)}
>
<option value="123-4567">"123-4567"</option>
</select>
ฉันได้ลองใช้ไวยากรณ์ประเภทต่าง ๆ เพื่อเชื่อมโยงค่าที่ส่งผ่านใน 'prop' ไปยัง prevState:
prevState.prop = e.target.value;
prevState.(prop) = e.target.value;
${prevState} + '.' + ${prop} = e.target.value; // Dumb, I know
แต่ฟังก์ชันไม่เคยรู้จัก "prop" ที่ฉันส่งผ่านจากฟังก์ชัน ฉันแน่ใจว่าต้องมีวิธีง่ายๆ ในการทำเช่นนี้ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.