Form submission handling lets your app collect and use information users type in forms. It helps you respond when users click submit.
Form submission handling in React
function handleSubmit(event) { event.preventDefault(); // Your code to process form data } <form onSubmit={handleSubmit}> {/* form fields here */} <button type="submit">Submit</button> </form>
Use event.preventDefault() to stop the page from reloading.
Attach your handler function to the form's onSubmit event.
function handleSubmit(event) { event.preventDefault(); alert('Form submitted!'); } <form onSubmit={handleSubmit}> <button type="submit">Submit</button> </form>
import { useState } from 'react'; function MyForm() { const [name, setName] = useState(''); function handleSubmit(event) { event.preventDefault(); alert(`Hello, ${name}!`); } return ( <form onSubmit={handleSubmit}> <input type="text" value={name} onChange={e => setName(e.target.value)} placeholder="Enter your name" aria-label="Name" /> <button type="submit">Submit</button> </form> ); }
This React component shows a simple email subscription form. When the user types an email and clicks submit, the page does not reload. Instead, it shows a thank you message below the form. The form uses accessible labels and required fields.
import React, { useState } from 'react'; export default function SimpleForm() { const [email, setEmail] = useState(''); const [message, setMessage] = useState(''); function handleSubmit(event) { event.preventDefault(); setMessage(`Thank you for submitting your email: ${email}`); } return ( <main style={{ maxWidth: '400px', margin: '2rem auto', fontFamily: 'Arial, sans-serif' }}> <h1>Subscribe</h1> <form onSubmit={handleSubmit} aria-label="Email subscription form"> <label htmlFor="emailInput">Email address:</label><br /> <input id="emailInput" type="email" value={email} onChange={e => setEmail(e.target.value)} placeholder="you@example.com" required aria-required="true" style={{ width: '100%', padding: '0.5rem', marginTop: '0.25rem', marginBottom: '1rem', fontSize: '1rem' }} /> <button type="submit" style={{ padding: '0.5rem 1rem', fontSize: '1rem' }}>Submit</button> </form> {message && <p role="alert" style={{ marginTop: '1rem', color: 'green' }}>{message}</p>} </main> ); }
Always use event.preventDefault() to stop the page from refreshing on submit.
Use state to keep track of form input values.
Label your inputs clearly and use aria-label or htmlFor for accessibility.
Form submission handling lets you control what happens when users send a form.
Use onSubmit on the form and event.preventDefault() to stop page reload.
Use state to read and respond to user input.
Practice
event.preventDefault() do in a React form submission handler?Solution
Step 1: Understand default form behavior
By default, submitting a form reloads the page to send data to the server.Step 2: Role of event.preventDefault()
This method stops the default reload so you can handle submission in React code.Final Answer:
It stops the browser from reloading the page when the form is submitted. -> Option BQuick Check:
event.preventDefault() = stops reload [OK]
- Thinking preventDefault clears inputs
- Assuming preventDefault submits data automatically
- Confusing preventDefault with resetting state
Solution
Step 1: Check React event naming conventions
React uses camelCase for event handlers, so it must beonSubmit.Step 2: Validate JSX syntax
Attributes are case-sensitive;onsubmitis incorrect, must beonSubmit.Final Answer:
<form onSubmit={handleSubmit}> -> Option AQuick Check:
React event handlers use camelCase = onSubmit [OK]
- Using lowercase onsubmit instead of onSubmit
- Using non-existent attributes like submit or onsubmitHandler
- Forgetting curly braces around handler function
function MyForm() {
const [name, setName] = React.useState('');
function handleSubmit(event) {
event.preventDefault();
console.log(name);
}
return (
<form onSubmit={handleSubmit}>
<input value={name} onChange={e => setName(e.target.value)} />
<button type="submit">Send</button>
</form>
);
}Solution
Step 1: Understand controlled input behavior
The input's value is linked to state variablename, updated on every change.Step 2: What happens on submit?
On submit,handleSubmitlogs the currentnamestate, which matches input content.Final Answer:
The current value typed in the input field. -> Option AQuick Check:
Controlled input state logs current input [OK]
- Assuming name is always empty on submit
- Confusing button text with input value
- Forgetting to call event.preventDefault()
function Form() {
const [email, setEmail] = React.useState('');
function handleSubmit() {
event.preventDefault();
alert(email);
}
return (
<form onSubmit={handleSubmit}>
<input value={email} onChange={e => setEmail(e.target.value)} />
<button type="submit">Submit</button>
</form>
);
}Solution
Step 1: Check handleSubmit parameters
The function usesevent.preventDefault()but does not receiveeventas a parameter.Step 2: Why is this a problem?
Withouteventparameter,eventis undefined, causing a runtime error.Final Answer:
Missing event parameter in handleSubmit function. -> Option DQuick Check:
Event must be passed to handler to call preventDefault [OK]
- Forgetting to add event parameter
- Thinking alert is disallowed
- Confusing button types for form submission
function ContactForm() {
const [message, setMessage] = React.useState('');
function handleSubmit(event) {
event.preventDefault();
console.log(message);
// What goes here?
}
return (
<form onSubmit={handleSubmit}>
<textarea value={message} onChange={e => setMessage(e.target.value)} />
<button type="submit">Send</button>
</form>
);
}Solution
Step 1: Understand controlled components
The textarea's value is controlled by React statemessage, so clearing input means resetting this state.Step 2: Why setMessage('') works best
CallingsetMessage('')updates state to empty string, clearing the textarea in UI.Final Answer:
setMessage(''); // Reset state to empty string -> Option CQuick Check:
Reset controlled input by updating state [OK]
- Trying to assign directly to state variable
- Using event.target.reset() which doesn't update React state
- Reloading page instead of clearing state
Ready to prove it?
Pass the test and this pattern moves unknown
