2015-02-12 7 views
62

Bei der Übermittlung eines Formulars versuche ich doSomething() anstelle der Standard-Post-Verhalten.Einstellung onSubmit in React.js

Offenbar in Reaktion, onSubmit is a supported event for forms. Allerdings, wenn ich den folgenden Code versuchen:

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

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

Das Verfahren doSomething() ausgeführt wird, aber danach wird die Standardpost Verhalten noch durchgeführt.

Sie können dies in meinem jsfiddle testen.

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

Antwort

74

Geben Sie in Ihrer doSomething() Funktion das Ereignis e ein und verwenden Sie e.preventDefault().

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

Ab V0.13 gut funktionieren, Rückgabe falsch von Event-Handler ignoriert werden, so dass Sie e.preventDefault verwenden müssen werden() oder e.stopPropagation () – joshuaegclark

+1

Wie beantwortet, letzteres ist bevorzugt. –

3

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>; 
    } 
}); 
+3

this.doSomething * – martin

+2

In meinem Fall funktioniert es mit und ohne 'this':' {this.doSomething} 'oder' {doSomething} 'ist in Ordnung, weil' doSomething' mit '' render() 'verbunden ist. – starikovs

35

Ich würde auch vorschlagen, den Event-Handler außerhalb Rendern 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 der Verwendung von Formular in der Komponente :) – holms

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

es für mich