I'm building out a form with React, and I want to store the form fields in an object with nested data like this:
{
name: "Test User",
email: "test@example.com.com",
address: {
street: "123 Main St",
city: "New York",
state: "NY"
}
}
The nested address
is what I'm having trouble with.
My code looks like this:
const [booking, setBooking] = React.useState({ address: {} });
const handleChange = e => {
const { name, value } = e.target;
setBooking(prevState => ({
...prevState,
[name]: value
}));
};
return (
<form onSubmit={handleSubmit}>
<label>Name</label><input type="text" name="name" value={booking.name} onChange={handleChange} />
<label>Email</label><input type="text" name="email" value={booking.email} onChange={handleChange} />
<label>Street Address</label><input type="text" name="address.street" value={booking.address.street} onChange={handleChange} />
<label>City</label><input type="text" name="address.city" value={booking.address.city} onChange={handleChange} />
<label>State</label><input type="text" name="address.state" value={booking.address.state} onChange={handleChange} />
<button type="submit">Create booking</button><br /><br />
</form>
)
But with this approach, the address values are not being nested. For example, for the street address field, the booking
ends up with a key of address.street
rather than using the nested address
object.
How can I get the form data to be stored in a nested object?