Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting onSubmit in React.js

On submission of a form, I'm trying to doSomething() instead of the default post behaviour.

Apparently in React, onSubmit is a supported event for forms. However, when I try the following code:

var OnSubmitTest = React.createClass({     render: function() {         doSomething = function(){            alert('it works!');         }          return <form onSubmit={doSomething}>         <button>Click me</button>         </form>;     } }); 

The method doSomething() is run, but thereafter, the default post behaviour is still carried out.

You can test this in my jsfiddle.

My question: How do I prevent the default post behaviour?

like image 779
Lucas du Toit Avatar asked Feb 12 '15 13:02

Lucas du Toit


People also ask

How do I change the input value in React?

To update a React input text field with the value on onBlur event, we can set the onBlur prop of the input to a function that does something with the input value. We defined the inputValue state with the useState hook. Then we set the value prop of the input to inputValue .

How do you handle forms in React?

Handling Forms In HTML, form data is usually handled by the DOM. In React, form data is usually handled by the components. When the data is handled by the components, all the data is stored in the component state. You can control changes by adding event handlers in the onChange attribute.


2 Answers

In your doSomething() function, pass in the event e and use e.preventDefault().

doSomething = function (e) {     alert('it works!');     e.preventDefault(); } 
like image 102
Henrik Andersson Avatar answered Sep 19 '22 04:09

Henrik Andersson


I'd also suggest moving the event handler outside render.

var OnSubmitTest = React.createClass({    submit: function(e){     e.preventDefault();     alert('it works!');   }    render: function() {     return (       <form onSubmit={this.submit}>         <button>Click me</button>       </form>     );   } }); 
like image 36
Adam Stone Avatar answered Sep 20 '22 04:09

Adam Stone