React deals with forms in a different way from regular html.
We can specify the
different form inputs [[Text Area in react]] [[Input Box in react]] [[Checkbox in
react]] [[Radio buttons in react]] [[Select option in react]]
Example of react form code:
import React from "react"
export default function Form() {
const [formData, setFormData] = React.useState(
{
firstName: "",
lastName: "",
email: "",
comments: "",
isFriendly: true,
employment: "",
favColor: ""
}
)
function handleChange(event) {
const {name, value, type, checked} = event.target
setFormData(prevFormData => {
return {
...prevFormData,
[name]: type === "checkbox" ? checked : value
}
})
}
function handleSubmit(event) {
event.preventDefault()
// submitToApi(formData)
console.log(formData)
}
return (
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="First Name"
onChange={handleChange}
name="firstName"
value={formData.firstName}
/>
<input
1
type="text"
placeholder="Last Name"
onChange={handleChange}
name="lastName"
value={formData.lastName}
/>
<input
type="email"
placeholder="Email"
onChange={handleChange}
name="email"
value={formData.email}
/>
<textarea
value={formData.comments}
placeholder="Comments"
onChange={handleChange}
name="comments"
/>
<input
type="checkbox"
id="isFriendly"
checked={formData.isFriendly}
onChange={handleChange}
name="isFriendly"
/>
<label htmlFor="isFriendly">Are you friendly?</label>
<br />
<br />
<fieldset>
<legend>Current employment status</legend>
<input
type="radio"
id="unemployed"
name="employment"
value="unemployed"
checked={formData.employment === "unemployed"}
onChange={handleChange}
/>
<label htmlFor="unemployed">Unemployed</label>
<br />
<input
type="radio"
id="part-time"
2
name="employment"
value="part-time"
checked={formData.employment === "part-time"}
onChange={handleChange}
/>
<label htmlFor="part-time">Part-time</label>
<br />
<input
type="radio"
id="full-time"
name="employment"
value="full-time"
checked={formData.employment === "full-time"}
onChange={handleChange}
/>
<label htmlFor="full-time">Full-time</label>
<br />
</fieldset>
<br />
<label htmlFor="favColor">What is your favorite color?</label>
<br />
<select
id="favColor"
value={formData.favColor}
onChange={handleChange}
name="favColor"
>
<option value="red">Red</option>
<option value="orange">Orange</option>
<option value="yellow">Yellow</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
<option value="indigo">Indigo</option>
<option value="violet">Violet</option>
</select>
<br />
<br />
<button>Submit</button>
</form>
)
}
To understand the above code, we need to explain a couple of things. Each
3
of inputs have a prop called onChange that would execute a function that is
responsible for storing the data inserted by the user into a useState variable.
The handleChange function is able to store the data to the useState variable
because of the event.target object which saves the values in the webpage, this
is why we have the name variable to determine which input it is being changed.
From there the change is saved and updated.
However, an important thing to keep in mind is controlled components. Con-
trolled components allows for the state in react to control the input being dis-
played to the user instead of the html being rendered from jsx to controlling the
values and sending those values to the state. This is simply done by having a
prop called value in the input component and have the value equal to the state
variable.
To submit the information of a form we simply have a button that would be of
type submit( is of type submit by default when it is inside of a
). From there the form would have a onSubmit function that would handle the
logic of what would need to happen when submitting the form
#Web-Dev #Frontend #React #javascript