saya sudah
var TestApp = React.createClass({
getComponent: function(){
console.log(this.props);
},
render: function(){
return(
<div>
<ul>
<li onClick={this.getComponent}>Component 1</li>
</ul>
</div>
);
}
});
React.renderComponent(<TestApp />, document.body);
Saya ingin mewarnai latar belakang elemen daftar yang diklik. Bagaimana saya bisa melakukan ini di React?
Sesuatu seperti
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
javascript
jquery
reactjs
pengguna544079
sumber
sumber
event.currentTarget.style.backgroundColor = '#ccc';
kecuali jika Anda benar-benar memahami apa yang Anda lakukan (sebagian besar waktu, saat mengintegrasikan widget pihak ketiga).Dua cara yang bisa saya pikirkan adalah
Ini adalah favorit pribadi saya.
Berikut adalah DEMO
Saya harap ini membantu.
sumber
.bind
tidak mengambil parameter tambahan. Tapi dalam kasus pertama memang begitu. Saya tidak berpikir ada cara lainBerikut adalah bagaimana Anda mendefinisikan penanganan kejadian onClick react , yang menjawab judul pertanyaan ... menggunakan sintaks es6
sumber
bind
fungsi panah maupun panah tidak boleh digunakan di dalamrender
metode karena menghasilkan fungsi baru yang dibuat setiap saat. Ini memiliki efek mengubah status komponen, dan komponen dengan status yang diubah selalu dirender ulang. Bagi satu orang,a
ini bukan masalah besar. Untuk daftar yang dibuat dengan item yang dapat diklik, ini menjadi masalah besar dengan sangat cepat. Inilah mengapa secara khusus diperingatkan.Gunakan ECMA2015. Fungsi panah membuat "ini" jauh lebih intuitif.
sumber
index
tidak melakukan apapun disini?Jika Anda menggunakan ES6, berikut beberapa contoh kode sederhana:
Dalam badan kelas ES6, fungsi tidak lagi memerlukan kata kunci 'function' dan tidak perlu dipisahkan dengan koma. Anda juga dapat menggunakan sintaks => juga jika Anda mau.
Berikut adalah contoh dengan elemen yang dibuat secara dinamis:
Perhatikan bahwa setiap elemen yang dibuat secara dinamis harus memiliki 'kunci' referensi unik.
Selain itu, jika Anda ingin meneruskan objek data aktual (bukan peristiwa) ke dalam fungsi onClick, Anda harus meneruskannya ke bind Anda. Sebagai contoh:
Fungsi onClick baru:
Meneruskan objek data:
sumber
bind
fungsi panah atau panah di JSX.Jadi seperti yang disebutkan dalam dokumentasi React , mereka sangat mirip dengan HTML normal dalam hal Penanganan Event, tetapi nama event di React menggunakan camelcase, karena mereka bukan benar-benar HTML, mereka adalah JavaScript, juga, Anda meneruskan fungsinya saat kami meneruskan pemanggilan fungsi dalam format string untuk HTML, keduanya berbeda, tetapi konsepnya sangat mirip ...
Lihat contoh di bawah ini, perhatikan cara event diteruskan ke fungsi:
sumber
sumber
@ user544079 Semoga demo ini bisa membantu :) Saya sarankan untuk mengubah warna latar belakang dengan mengganti nama kelas.
sumber
sumber
Anda dapat menggunakan metode React.createClone. Buat elemen Anda, lalu buat tiruannya. Selama pembuatan klon, Anda dapat menyuntikkan alat peraga. Masukkan onClick: method prop seperti ini
{ onClick : () => this.changeColor(originalElement, index) }
metode changeColor akan mengatur status dengan duplikat, memungkinkan Anda untuk tetap mengatur warna dalam prosesnya.
sumber
Ini adalah pola React non-standar (tapi tidak jarang) yang tidak menggunakan JSX, alih-alih menempatkan semuanya sebaris. Juga, itu Coffeescript.
'Cara bereaksi' untuk melakukan ini adalah dengan status komponen itu sendiri:
(
c = console.log.bind console
)Contoh ini berhasil - Saya mengujinya secara lokal. Anda dapat melihat kode contoh ini tepat di github saya . Awalnya env hanya lokal untuk keperluan litbang papan tulis saya sendiri tetapi saya mempostingnya ke Github untuk ini. Ini mungkin akan dihapuskan di beberapa titik tetapi Anda dapat memeriksa komit dari 8 Sept 2016 untuk melihat ini.
Secara lebih umum, jika Anda ingin melihat bagaimana pola CS / no-JSX untuk React ini bekerja, lihat beberapa pekerjaan terbaru di sini . Mungkin saja saya akan memiliki waktu untuk menerapkan POC sepenuhnya untuk ide aplikasi ini, tumpukan yang mencakup NodeJS, Primus, Redis, & React.
sumber
do
lambda: Ungkapan ini juga berlaku:background: if @state.lighted_item is uid then 'magenta' else 'chartreuse'