Einstellen von onSubmit in React.js


97

Beim Absenden eines Formulars versuche ich, doSomething()anstelle des Standard-Post-Verhaltens.

Anscheinend ist onSubmit in React ein unterstütztes Ereignis für Formulare. Wenn ich jedoch den folgenden Code versuche:

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

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

Die Methode doSomething()wird ausgeführt, danach wird jedoch weiterhin das Standardverhalten nach dem Ausführen ausgeführt.

Sie können dies in meiner jsfiddle testen .

Meine Frage: Wie verhindere ich das Standard-Post-Verhalten?

Antworten:


118

Übergeben Sie in Ihrer doSomething()Funktion das Ereignis eund verwenden Sie es e.preventDefault().

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

18
Ab Version 0.13 wird die Rückgabe von false von Ereignishandlern ignoriert, sodass Sie e.preventDefault () oder e.stopPropagation ()
joshuaegclark

1
Wie beantwortet, ist letzteres bevorzugt.
Henrik Andersson

Ich denke du meinst das erstere
Shark Lasers

@SharkLasers Dieser Kommentar wurde zu einer Bearbeitung dieses Beitrags abgegeben, die nicht mehr verfügbar ist.
Henrik Andersson

Fairerweise sollten Sie Kommentare wahrscheinlich löschen, wenn sie nicht mehr relevant sind.
Haifischlaser

46

Ich würde auch vorschlagen, den Ereignishandler außerhalb des Renderns zu verschieben.

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
Dies ist die richtige Art, Form in Komponente zu verwenden :)
Holms

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

es funktioniert gut für mich


5

Sie können das Ereignis als Argument an die Funktion übergeben und dann das Standardverhalten verhindern.

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
In meinem Fall funktioniert es mit und ohne this: {this.doSomething}oder {doSomething}ist in Ordnung, weil doSomethingmit dem render().
Starikovs
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.