Saya sedang bekerja dengan objek status bersarang yang telah saya perbarui dengan fungsi onChange, seperti:
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>
Ini menyelesaikan triknya. Namun saat ini, jika saya ingin memperbarui beberapa properti negara melalui formulir besar dengan dropdown/bidang input dll, saya harus membuat kode keras 6 penangan onChange yang berbeda untuk bidang tersebut.
Sebaliknya, saya lebih memilih untuk hanya memiliki satu pengendali onChange, dan meneruskan status dari bidang formulir untuk properti status yang saya ubah, tetapi saya tidak dapat memahami sintaksisnya:
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>
Saya telah mencoba menggunakan berbagai jenis sintaksis untuk merangkai nilai 'prop' yang diteruskan ke prevState:
prevState.prop = e.target.value;
prevState.(prop) = e.target.value;
${prevState} + '.' + ${prop} = e.target.value; // Dumb, I know
Namun fungsinya tidak pernah mengenali "prop" yang saya berikan dari fungsi tersebut. Saya yakin pasti ada cara sederhana untuk melakukan ini. Bantuan apa pun akan sangat dihargai.