React.js'de onSubmit'i ayarlama


97

Bir form gönderildiğinde doSomething(), varsayılan gönderi davranışı yerine yapmaya çalışıyorum .

Görünüşe göre React'te onSubmit formlar için desteklenen bir olaydır. Ancak, aşağıdaki kodu denediğimde:

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

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

Yöntem doSomething()çalıştırılır, ancak daha sonra varsayılan gönderme davranışı yine de gerçekleştirilir.

Bunu jsfiddle'ımda test edebilirsiniz .

Sorum: Varsayılan gönderi davranışını nasıl engellerim?

Yanıtlar:


119

Senin içinde doSomething()işlev durumunda geçmesi eve kullanıma e.preventDefault().

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

19
V0.13'ten itibaren, olay işleyicilerinden false döndürme göz ardı edilecek, bu nedenle e.preventDefault () veya e.stopPropagation ()
joshuaegclark,

1
Cevaplandığı gibi, ikincisi tercih edilir.
Henrik Andersson

Sanırım eski demek istiyorsun
Köpekbalığı Lazerleri

@SharkLasers Bu yorum, bu gönderinin artık mevcut olmayan bir düzenlemesine yapıldı.
Henrik Andersson

Yeterince adil, ancak artık alakalı olmayan yorumları muhtemelen silmelisiniz.
Köpekbalığı Lazerleri

46

Ayrıca olay işleyicisini render dışına taşımayı da öneririm.

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
Bu, bileşende formu kullanmanın doğru yolu :)
holms

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

benim için iyi çalışıyor


5

Olayı işleve bağımsız değişken olarak iletebilir ve ardından varsayılan davranışı engelleyebilirsiniz.

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
Benim durumumda, onunla ve olmadan çalışır this: {this.doSomething}ya {doSomething}çünkü para cezası olduğu doSomethingwithing olduğunu render().
starikovs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.