Bereaksi mampu membuat atribut khusus seperti yang dijelaskan di http://facebook.github.io/react/docs/jsx-gotchas.html :
Jika Anda ingin menggunakan atribut khusus, Anda harus awalan dengan data-.
<div data-custom-attribute="foo" />
Dan itu berita bagus kecuali saya tidak dapat menemukan cara untuk mengaksesnya dari objek acara misalnya:
render: function() {
...
<a data-tag={i} style={showStyle} onClick={this.removeTag}></a>
...
removeTag: function(event) {
this.setState({inputVal: event.target????});
},
Elemen dan data-
properti membuat html baik-baik saja. Properti standar seperti style
dapat diakses dengan event.target.style
baik. Alih-alih event.target
saya mencoba:
event.target.props.data.tag
event.target.props.data["tag"]
event.target.props["data-tag"]
event.target.data.tag
event.target.data["tag"]
event.target["data-tag"]
tidak ada yang berhasil.
javascript
facebook
reactjs
andriy_sof
sumber
sumber
aria-modal=true
, Anda mendorong perubahan (ke false) ke penyimpanan atribut aria / data , tetapi tidak ada yang lain yang diubah (seperti konten komponen atau kelas atau variabel di sana) karena hasilnya ReactJs tidak akan memperbarui aria / attr data dalam komponen itu. Saya telah bermain-main sepanjang hari untuk menyadari hal itu.Jawaban:
Untuk membantu Anda mendapatkan hasil yang diinginkan dengan cara yang mungkin berbeda dari yang Anda tanyakan:
Perhatikan
bind()
. Karena ini semua javascript, Anda dapat melakukan hal-hal praktis seperti itu. Kami tidak perlu lagi melampirkan data ke node DOM untuk melacaknya.IMO ini jauh lebih bersih daripada mengandalkan acara DOM.
Perbarui April 2017: Hari-hari ini saya akan menulis
onClick={() => this.removeTag(i)}
sebagai ganti.bind
sumber
unshift
ing array argumen fungsi . Jika "objek acara" berada di indeks0
sekarang akan di indeks1
.removeTag: function(i, evt) {
event.target
memberi Anda simpul DOM asli, maka Anda perlu menggunakan DOM API biasa untuk mengakses atribut. Berikut adalah dokumen tentang cara melakukannya: Menggunakan atribut data .Anda dapat melakukan salah satu
event.target.dataset.tag
atauevent.target.getAttribute('data-tag')
; salah satu yang berfungsi.sumber
event.target.dataset
tidak didefinisikan tetapievent.target.getAttribute('data-tag')
berfungsi. browser lainnya baik-baik saja. Terima kasihshouldComponentUpdate
akan memiliki masalah yang sama kecuali jika Anda hanya mengabaikan prop fungsi.event.currentTarget.getAttibute('data-tag')
Inilah cara terbaik yang saya temukan:
Atribut tersebut disimpan dalam "NamedNodeMap", yang dapat Anda akses dengan mudah dengan metode getNamedItem.
sumber
.value
untuk mendapatkan nilai aktual.value
di bagian akhir seperti yang disarankanAtau Anda dapat menggunakan penutupan:
sumber
sumber
Pada React v16.1.1 (2017), berikut adalah solusi resmi: https://reactjs.org/docs/handling-events.html#passing-arguments-to-event-handlers
TLDR: OP harus melakukan:
sumber
i
adalah atribut khusus yang OP ingin sampaikan. Ini beberapa variabel yang ada dalam ruang lingkup ketikaa
elemen didefinisikan.jadi
e.currentTarget.attributes['tag'].value
bekerja untuk sayasumber
Anda dapat mengakses atribut data seperti ini
sumber
Baris kode tunggal ini memecahkan masalah bagi saya:
sumber
Saya tidak tahu tentang Bereaksi, tetapi dalam kasus umum Anda dapat memberikan atribut khusus seperti ini:
1) mendefinisikan di dalam html-tag atribut baru dengan awalan data
2) dapatkan dari javascript dengan
sumber
Jika ada yang mencoba menggunakan event.target di Bereaksi dan menemukan nilai nol, itu karena SyntheticEvent telah menggantikan event.target. SyntheticEvent sekarang memiliki 'currentTarget', seperti di event.currentTarget.getAttribute ('data-username').
https://facebook.github.io/react/docs/events.html
Sepertinya React melakukan ini sehingga berfungsi di lebih banyak browser. Anda dapat mengakses properti lama melalui atribut nativeEvent.
sumber
Coba alih-alih menetapkan properti dom (yang lambat) cukup berikan nilai Anda sebagai parameter untuk berfungsi yang sebenarnya membuat penangan Anda:
sumber
Anda cukup menggunakan objek event.target.dataset . Ini akan memberi Anda objek dengan semua atribut data.
sumber
Di Bereaksi Anda tidak memerlukan data html, gunakan fungsi untuk mengembalikan fungsi lainnya; seperti ini, sangat sederhana kirim params khusus dan Anda dapat mengakses data khusus dan acara.
sumber