I have a form with dynamically created inputs. The number of inputs and their name changes depending on fetched data. I'd like to create an array of objects from the values I get from those inputs.
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 function:
const handleChange = (e, packageName) => {
setForm([...form, { [packageName]: parseInt(e.target.value) }]);
};
Current output:
form: [
{
"250g": 1
},
{
"250g": 2
},
{
"250g": 3
},
{
"500g": 1
},
{
"500g": 2
}
]
Every change in input value creates a new object, but I'd like to just change the value in that particular object, that is changed currently.
Desired output:
form: {
"250g": { quantity: 3 },
"500g": { quantity: 2 }
}