React Multiple Inputs
Managing multiple form inputs in React
📝 What are Multiple Inputs?
Multiple inputs let users enter different information in forms. React uses state to track each input's value, making it easy to manage forms with many fields efficiently.
const [name, setName] = useState('');
const [email, setEmail] = useState('');
Managing Multiple Inputs
When building forms, you often need multiple input fields. React provides several ways to handle this efficiently. You can use separate state variables for each input or use a single object to store all values together.
Separate States
Individual state for each input
Object State
Single object for all inputs
Controlled Inputs
React controls input values
Form Validation
Check input values easily
🔹 Method 1: Separate State Variables
The simplest approach is to create a separate state variable for each input field:
import { useState } from 'react';
function UserForm() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [age, setAge] = useState('');
const handleSubmit = (e) => {
e.preventDefault();
console.log({ name, email, age });
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Name"
value={name}
onChange={(e) => setName(e.target.value)}
/>
<input
type="email"
placeholder="Email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
<input
type="number"
placeholder="Age"
value={age}
onChange={(e) => setAge(e.target.value)}
/>
<button type="submit">Submit</button>
</form>
);
}
Output:
🔹 Method 2: Single Object State
For forms with many inputs, use a single object to store all values. This keeps your code cleaner and more organized:
import { useState } from 'react';
function RegistrationForm() {
const [formData, setFormData] = useState({
username: '',
email: '',
password: ''
});
const handleChange = (e) => {
const { name, value } = e.target;
setFormData(prev => ({
...prev,
[name]: value
}));
};
const handleSubmit = (e) => {
e.preventDefault();
console.log(formData);
};
return (
<form onSubmit={handleSubmit}>
<input
name="username"
placeholder="Username"
value={formData.username}
onChange={handleChange}
/>
<input
name="email"
type="email"
placeholder="Email"
value={formData.email}
onChange={handleChange}
/>
<input
name="password"
type="password"
placeholder="Password"
value={formData.password}
onChange={handleChange}
/>
<button type="submit">Register</button>
</form>
);
}
Key Points:
-
Use the
nameattribute to identify each input -
Spread operator (
...prev) keeps existing values -
Computed property name (
[name]) updates the right field
🔹 Displaying Input Values
You can display the current values as users type:
import { useState } from 'react';
function LivePreview() {
const [user, setUser] = useState({
firstName: '',
lastName: ''
});
const handleChange = (e) => {
setUser({
...user,
[e.target.name]: e.target.value
});
};
return (
<div>
<input
name="firstName"
placeholder="First Name"
value={user.firstName}
onChange={handleChange}
/>
<input
name="lastName"
placeholder="Last Name"
value={user.lastName}
onChange={handleChange}
/>
<p>Full Name: {user.firstName} {user.lastName}</p>
</div>
);
}
Output:
Full Name:
🔹 Best Practices
-
Use controlled components:
Always set
valueandonChange -
Name your inputs:
Use the
nameattribute for object state -
Prevent default:
Use
e.preventDefault()in form submit - Validate inputs: Check values before submitting
- Clear forms: Reset state after successful submission