Setting onSubmit in React.js
Asked Answered
V

4

118

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?

Vinificator answered 12/2, 2015 at 13:53 Comment(0)
M
141

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

doSomething = function (e) {
    alert('it works!');
    e.preventDefault();
}
Mucilaginous answered 12/2, 2015 at 14:3 Comment(4)
As of v0.13, returning false from event handlers will be ignored, so you'll have to use e.preventDefault() or e.stopPropagation()Venetian
I think you mean the formerArteriole
@SharkLasers That comment was made on a edit of this post that is no longer available.Mucilaginous
Fair enough, you should probably delete comments when they are no longer relevant though.Arteriole
C
56

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>
    );
  }
});
Calculated answered 12/2, 2015 at 15:4 Comment(1)
This is proper way of using form in component :)Dabney
I
26
<form onSubmit={(e) => {this.doSomething(); e.preventDefault();}}></form>

it work fine for me

Ingurgitate answered 1/6, 2017 at 9:55 Comment(0)
S
6

You can pass the event as argument to the function and then prevent the default behaviour.

var OnSubmitTest = React.createClass({
        render: function() {
        doSomething = function(event){
           event.preventDefault();
           alert('it works!');
        }

        return <form onSubmit={this.doSomething}>
        <button>Click me</button>
        </form>;
    }
});
Sunless answered 12/2, 2015 at 14:4 Comment(1)
In my case, it works with and without this: {this.doSomething} or {doSomething} is fine because doSomething is withing the render().Proceeds

© 2022 - 2024 — McMap. All rights reserved.