在 React.js 中设置 onSubmit

IT技术 javascript forms form-submit reactjs onsubmit
2021-03-24 23:27:37

在提交表单时,我试图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 中对此进行测试

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

4个回答

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

doSomething = function (e) {
    alert('it works!');
    e.preventDefault();
}
从 v0.13 开始,从事件处理程序返回 false 将被忽略,因此您必须使用 e.preventDefault() 或 e.stopPropagation()
2021-05-29 23:27:37
@SharkLasers 该评论是对这篇不再可用的帖子的编辑做出的。
2021-05-29 23:27:37
正如所回答的,后者是首选。
2021-05-30 23:27:37
我想你是说前者
2021-06-17 23:27:37
公平地说,当评论不再相关时,您可能应该删除它们。
2021-06-21 23:27:37

我还建议将事件处理程序移到渲染之外。

var OnSubmitTest = React.createClass({

  submit: function(e){
    e.preventDefault();
    alert('it works!');
  }

  render: function() {
    return (
      <form onSubmit={this.submit}>
        <button>Click me</button>
      </form>
    );
  }
});
这是在组件中使用表单的正确方法:)
2021-05-29 23:27:37
<form onSubmit={(e) => {this.doSomething(); e.preventDefault();}}></form>

它对我来说很好用

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

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

        return <form onSubmit={this.doSomething}>
        <button>Click me</button>
        </form>;
    }
});
在我的情况下,它的工作原理与不this{this.doSomething}或者{doSomething}是好的,因为doSomething是withing的render()
2021-05-31 23:27:37