Я работаю с вложенным объектом состояния, который обновляю с помощью функций 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>
Это делает фокус. Однако в настоящее время, если я хочу обновить несколько свойств состояния с помощью большой формы с раскрывающимися списками / полями ввода и т. Д., Мне нужно жестко закодировать 6 различных обработчиков onChange для этих полей.
Вместо этого я бы предпочел иметь только один обработчик 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
Но функция никогда не распознает «опору», которую я передаю от функции. Я уверен, что должен быть простой способ сделать это. Любая помощь будет принята с благодарностью.