Kedua jenis ini tentu saja hanya JavaScript, tetapi pola pertama adalah jenis tradisional.
Bagaimanapun, di JSX, apa pun yang tertutup kurung keriting dieksekusi sebagai JavaScript, jadi Anda pada dasarnya dapat melakukan apa pun yang Anda inginkan di sana. Tetapi menggabungkan string JSX dan kurung keriting adalah hal yang tidak perlu untuk atribut.
Dalam kasus beberapa kelas dinamis, semua kelas dinamis harus berasal dari negara, artinya tidak mungkin digunakan element.classList.add("my-class"); Oleh karena itu memungkinkan untuk:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
Kevin Farrugia
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' 'Ini tidak berhasil. Adakah yang tahu mengapa?
kryptokinght
54
Tergantung pada berapa banyak kelas yang dinamis Anda perlu menambahkan sebagai proyek Anda tumbuh itu mungkin bernilai memeriksa keluar classnames utilitas oleh JedWatson di GitHub. Ini memungkinkan Anda untuk mewakili kelas kondisional Anda sebagai objek dan mengembalikan yang mengevaluasi ke true.
Jadi sebagai contoh dari dokumentasi Bereaksi:
render (){var btnClass = classNames({'btn':true,'btn-pressed':this.state.isPressed,'btn-over':!this.state.isPressed &&this.state.isHovered
});return<button className={btnClass}>I'm a button!</button>;}
Karena Bereaksi memicu re-render ketika ada perubahan status, nama kelas dinamis Anda ditangani secara alami dan tetap mengikuti status komponen Anda.
Penggunaan classNames untuk hal yang begitu sederhana adalah hal yang berlebihan. Hindari menggunakannya dan pilih jawaban sederhana dannyjolie
daftar periksa
2
Apakah Anda yakin itu hal yang sederhana? Dekat selalu Anda ingin memiliki kontrol penuh berbutir halus atas kelas apa yang diterapkan pada elemen.
Dragas
5
@checklist Saya berpendapat sebaliknya, paket classnames adalah 1.1kB sebelum Gzipping (dan setengah kB setelah Gzipping), tidak memiliki dependensi, dan menyediakan API yang jauh lebih bersih untuk manipulasi nama kelas. Tidak perlu terlalu dini mengoptimalkan sesuatu yang begitu kecil, ketika API jauh lebih ekspresif. Saat menggunakan manipulasi string standar, Anda harus ingat untuk memperhitungkan spasi, baik sebelum setiap nama kelas bersyarat, atau setelah setiap nama kelas standar.
tomhughes
classNames hebat, saya menemukan bahwa membaca, menambah, dan memperbaiki alat peraga lebih mudah daripada manipulasi manual karena komponen tumbuh dalam kompleksitas.
Anda dapat menggunakan paket npm ini . Ini menangani semuanya dan memiliki opsi untuk kelas statis dan dinamis berdasarkan variabel atau fungsi.
// Support for string arguments
getClassNames('class1','class2');// support for Object
getClassNames({class1:true, class2 :false});// support for all type of data
getClassNames('class1','class2',['class3','class4'],{
class5 :function(){returnfalse;},
class6 :function(){returntrue;}});<div className={getClassNames({class1:true, class2 :false})}/>
Jawaban:
Anda dapat melakukan ini, JavaScript normal:
atau versi templat string, dengan backticks:
Kedua jenis ini tentu saja hanya JavaScript, tetapi pola pertama adalah jenis tradisional.
Bagaimanapun, di JSX, apa pun yang tertutup kurung keriting dieksekusi sebagai JavaScript, jadi Anda pada dasarnya dapat melakukan apa pun yang Anda inginkan di sana. Tetapi menggabungkan string JSX dan kurung keriting adalah hal yang tidak perlu untuk atribut.
sumber
element.classList.add("my-class")
; Oleh karena itu memungkinkan untuk:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' '
Ini tidak berhasil. Adakah yang tahu mengapa?Tergantung pada berapa banyak kelas yang dinamis Anda perlu menambahkan sebagai proyek Anda tumbuh itu mungkin bernilai memeriksa keluar classnames utilitas oleh JedWatson di GitHub. Ini memungkinkan Anda untuk mewakili kelas kondisional Anda sebagai objek dan mengembalikan yang mengevaluasi ke true.
Jadi sebagai contoh dari dokumentasi Bereaksi:
Karena Bereaksi memicu re-render ketika ada perubahan status, nama kelas dinamis Anda ditangani secara alami dan tetap mengikuti status komponen Anda.
sumber
Sintaks yang mungkin sederhana adalah:
sumber
Ini adalah Opsi Terbaik untuk className Dinamis, lakukan saja beberapa penggabungan seperti yang kita lakukan dalam Javascript.
sumber
Jika Anda memerlukan nama gaya yang akan muncul sesuai dengan kondisi negara bagian, saya lebih suka menggunakan konstruksi ini:
sumber
coba ini menggunakan kait:
dan tambahkan ini di atribut className:
untuk menambah kelas:
untuk menghapus kelas:
sumber
Anda dapat menggunakan paket npm ini . Ini menangani semuanya dan memiliki opsi untuk kelas statis dan dinamis berdasarkan variabel atau fungsi.
sumber
sumber
Solusi ini dicoba dan diuji dalam React SPFx.
Tambahkan juga pernyataan impor:
sumber