'reactJs my event.preventDefault(); doesnt work
i try to do a form on react js and i don't want to refresh the page when i submit my form.
I do a callback on my server (flask).
When i try to do :"event.preventDefault();" my call to my flask server doesn't work.
there is my code:
import { useState } from 'react';
const Form = (props) => {
const componentDidMount = (event) => {
event.preventDefault();
// Simple POST request with a JSON body using fetch
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ title: title })
};
fetch('http://localhost:5000/add', requestOptions)
.then(response => response.json())
.catch(error => console.log(error))
}
const [title, setTitle] = useState('')
const [body, setBody] = useState('')
return (
<div>
<form onSubmit = {() => componentDidMount()} >
<label htmlFor="title" className="form-label">Title</label>
<input
type="text"
className="form-control"
placeholder ="Enter title"
value={title}
onChange={(e)=>setTitle(e.target.value)}
required
/>
<label htmlFor="body" className="form-label">Body</label>
<textarea
className="form-control"
placeholder ="Enter body"
value={body}
onChange={(e)=>setBody(e.target.value)}
required
>
</textarea>
<button
className="btn btn-primary mt-2"
>
Publish article</button>
</form>
</div>
)}
export default Form;
I don't want to refresh the page cause one in two my callback function and i want to work on it but i can't read the error on the console.
Thanks for your help!
Solution 1:[1]
It is because you are calling the function componentDidMount in form tag.
You just have to pass the reference of the function in the onSubmit attribute.
<form onSubmit={componentDidMount}>
...
</form>
Solution 2:[2]
you need to pass event as well to trigger event.preventDefault() function
<form onSubmit = {(event) => componentDidMount(event)} >
Solution 3:[3]
I wouldn't recommend to use a component lifecycle method (like componentDidMount) to handle a form submission event. You could just create a specific handler:
const Form = (props) => {
const handleSubmit = (event) => {
event.preventDefault();
// ...
}
// ...
return (
<div>
<form onSubmit={handleSubmit} >
{/* // ... */}
</form>
</div>
)
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Dharmik Patel |
| Solution 2 | Abbas Hussain |
| Solution 3 | Peterrabbit |
