【发布时间】:2020-01-09 20:25:13
【问题描述】:
我正在使用我一直在使用 onChange 函数更新的嵌套状态对象,如下所示:
const [someState, setSomeState] = useState({
customer: [
{
name: "Bob",
address: "1234 Main Street",
email: "bob@mail.com",
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 处理程序,并从我正在更改的 state 属性的表单字段中传递状态,但我无法弄清楚语法:
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
但该函数永远无法识别我从该函数传入的“道具”。我确信必须有一个简单的方法来做到这一点。任何帮助将不胜感激。
【问题讨论】:
标签: json reactjs events nested state