Saya perlu menambahkan kelas dinamis ke daftar kelas reguler, tetapi tidak tahu caranya (saya menggunakan babel), sesuatu seperti ini:
<div className="wrapper searchDiv {this.state.something}">
...
</div>
Ada ide?
Saya perlu menambahkan kelas dinamis ke daftar kelas reguler, tetapi tidak tahu caranya (saya menggunakan babel), sesuatu seperti ini:
<div className="wrapper searchDiv {this.state.something}">
...
</div>
Ada ide?
Jawaban:
Anda dapat melakukan ini, JavaScript normal:
className={'wrapper searchDiv ' + this.state.something}
atau versi templat string, dengan backticks:
className={`wrapper searchDiv ${this.state.something}`}
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.
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:
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.
Ini adalah Opsi Terbaik untuk className Dinamis, lakukan saja beberapa penggabungan seperti yang kita lakukan dalam Javascript.
className={
"badge " +
(this.state.value ? "badge-primary " : "badge-danger ") +
" m-4"
}
Jika Anda memerlukan nama gaya yang akan muncul sesuai dengan kondisi negara bagian, saya lebih suka menggunakan konstruksi ini:
<div className={'wrapper searchDiv' + (this.state.something === "a" ? " anotherClass" : "")'}>
coba ini menggunakan kait:
const [dynamicClasses, setDynamicClasses] = React.useState([
"dynamicClass1", "dynamicClass2
]);
dan tambahkan ini di atribut className:
<div className=`wrapper searchDiv ${[...dynamicClasses]}`>
...
</div>
untuk menambah kelas:
const addClass = newClass => {
setDynamicClasses([...dynamicClasses, newClass])
}
untuk menghapus kelas:
const deleteClass= classToDelete => {
setDynamicClasses(dynamicClasses.filter(class = > {
class !== classToDelete
}));
}
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() { return false; },
class6 : function() { return true; }
});
<div className={getClassNames({class1: true, class2 : false})} />
getBadgeClasses() {
let classes = "badge m-2 ";
classes += (this.state.count === 0) ? "badge-warning" : "badge-primary";
return classes;
}
<span className={this.getBadgeClasses()}>Total Count</span>
className={css(styles.mainDiv, 'subContainer')}
Solusi ini dicoba dan diuji dalam React SPFx.
Tambahkan juga pernyataan impor:
import { css } from 'office-ui-fabric-react/lib/Utilities';