React
Beginner
1 min read
Controlled Inputs with onChange
Example
import { useState } from 'react';
function RegistrationForm() {
const [form, setForm] = useState({
username: '',
email: '',
role: 'viewer',
agree: false,
});
const [submitted, setSubmitted] = useState(false);
const update = (field, value) =>
setForm(prev => ({ ...prev, [field]: value }));
const isValid = form.username.length >= 3 && form.email.includes('@') && form.agree;
const handleSubmit = (e) => {
e.preventDefault();
if (isValid) setSubmitted(true);
};
if (submitted) return <p>Registered as <strong>{form.username}</strong>!</p>;
return (
<form onSubmit={handleSubmit}>
{/* Text input */}
<input
type="text"
placeholder="Username (min 3 chars)"
value={form.username}
onChange={e => update('username', e.target.value)}
/>
{/* Email input */}
<input
type="email"
placeholder="Email"
value={form.email}
onChange={e => update('email', e.target.value)}
/>
{/* Select */}
<select value={form.role} onChange={e => update('role', e.target.value)}>
<option value="viewer">Viewer</option>
<option value="editor">Editor</option>
<option value="admin">Admin</option>
</select>
{/* Checkbox */}
<label>
<input
type="checkbox"
checked={form.agree}
onChange={e => update('agree', e.target.checked)}
/>
I agree to the terms
</label>
<button type="submit" disabled={!isValid}>Register</button>
</form>
);
}
export default RegistrationForm;