在React.js中设置onSubmit


97

在提交表单时,我正在尝试doSomething()取代默认的发布行为。

显然,在React中,onSubmit是表单支持的事件。但是,当我尝试以下代码时:

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

        return <form onSubmit={doSomething}>
        <button>Click me</button>
        </form>;
    }
});

该方法doSomething()已运行,但是此后仍执行默认的发布行为。

您可以在我的jsfiddle中进行测试。

我的问题:如何防止默认的发布行为?

Answers:


118

在您的doSomething()函数中,传递事件e并使用e.preventDefault()

doSomething = function (e) {
    alert('it works!');
    e.preventDefault();
}

18
从v0.13开始,事件处理程序返回的false将被忽略,因此您必须使用e.preventDefault()或e.stopPropagation()
joshuaegclark 2015年

1
如所回答的,后者是优选的。
亨里克·安德森

我认为您的意思是前者
Shark Lasers

@SharkLasers该评论是对这篇帖子的编辑的,不再可用。
Henrik Andersson

相当公平,但是您可能应该删除不再相关的评论。
Shark Lasers

46

我还建议将事件处理程序移到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>
    );
  }
});

1
这是在组件中使用表格的正确方法:)
holms

15
<form onSubmit={(e) => {this.doSomething(); e.preventDefault();}}></form>

对我来说很好


5

您可以将事件作为参数传递给函数,然后阻止默认行为。

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

        return <form onSubmit={this.doSomething}>
        <button>Click me</button>
        </form>;
    }
});

2
就我而言,它可以与和不一起使用this{this.doSomething}{doSomething}可以,因为它可以与一起doSomething使用render()
starikovs '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.