Mengatur onSubmit di React.js


97

Saat mengirimkan formulir, saya mencoba untuk doSomething()melakukan perilaku posting default.

Rupanya di React, onSubmit adalah acara yang didukung untuk formulir. Namun, ketika saya mencoba kode berikut:

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

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

Metode doSomething()dijalankan, tetapi setelah itu, perilaku posting default masih dijalankan.

Anda dapat menguji ini di jsfiddle saya .

Pertanyaan saya: Bagaimana cara mencegah perilaku posting default?

Jawaban:


119

Dalam doSomething()fungsi Anda , teruskan acara edan gunakan e.preventDefault().

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

18
Mulai v0.13, mengembalikan false dari event handler akan diabaikan, jadi Anda harus menggunakan e.preventDefault () atau e.stopPropagation ()
joshuaegclark

1
Seperti yang dijawab, yang terakhir lebih disukai.
Henrik Andersson

Saya pikir yang Anda maksud adalah yang pertama
Shark Lasers

@SharkLasers Komentar itu dibuat pada sunting kiriman ini yang tidak lagi tersedia.
Henrik Andersson

Cukup adil, Anda mungkin harus menghapus komentar jika sudah tidak relevan lagi.
Laser Hiu

46

Saya juga menyarankan untuk memindahkan event handler di luar 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
Ini adalah cara yang tepat untuk menggunakan formulir dalam komponen :)
holms

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

itu bekerja dengan baik untuk saya


5

Anda bisa meneruskan kejadian sebagai argumen ke fungsi dan kemudian mencegah perilaku default.

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
Dalam kasus saya, ini bekerja dengan dan tanpa this: {this.doSomething}atau {doSomething}baik-baik saja karena doSomethingdengan render().
starikovs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.