【发布时间】:2021-09-18 21:10:26
【问题描述】:
我有一个动态创建输入的表单。输入的数量及其名称会根据获取的数据而变化。我想根据从这些输入中获得的值创建一个对象数组。
const [form, setForm] = useState([]);
packages = ["250g", "500g"] //This varies depending on fetched data
HTML:
<form onSubmit={(e) => handleSubmit(e)}>
<ul>
{packages.map((packageName, index) => {
return (
<li key={index}>
<p>{packageName}</p>
<input type="number" min={0} value={form[packageName]} onChange={(e) => handleChange(e, packageName)} />
<button type="submit">BUY</button>
</li>
);
})}
</ul>
</form>
handleChange 函数:
const handleChange = (e, packageName) => {
setForm([...form, { [packageName]: parseInt(e.target.value) }]);
};
当前输出:
form: [
{
"250g": 1
},
{
"250g": 2
},
{
"250g": 3
},
{
"500g": 1
},
{
"500g": 2
}
]
输入值的每次更改都会创建一个新对象,但我只想更改当前已更改的特定对象中的值。
期望的输出:
form: {
"250g": { quantity: 3 },
"500g": { quantity: 2 }
}
【问题讨论】:
-
你想要的输出不是一个有效的 JS 结构。如果
form是一个对象而不是一个数组就可以了。 -
我猜结构是这样的?
form: [ { "250g": { quantity: 3 }}, { "500g": { quantity: 2 }}] -
好的,我现在从编辑中看到所需的输出是什么
-
@MadGrip 检查我的答案。我编辑它是因为我认为表单是一个数组,但我看到了编辑:)
-
MadGrip 你检查我们的答案了吗?
标签: javascript arrays reactjs ecmascript-6 spread