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 name attribute 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 value and onChange
  • Name your inputs: Use the name attribute for object state
  • Prevent default: Use e.preventDefault() in form submit
  • Validate inputs: Check values before submitting
  • Clear forms: Reset state after successful submission

🧠 Test Your Knowledge

What is the best way to handle many form inputs in React?