Düzenli sınıflar listesine dinamik bir sınıf eklemeniz gerekir, ancak (babil kullanıyorum), böyle bir şey hakkında hiçbir fikrim yok:
<div className="wrapper searchDiv {this.state.something}">
...
</div>
Herhangi bir fikir?
Düzenli sınıflar listesine dinamik bir sınıf eklemeniz gerekir, ancak (babil kullanıyorum), böyle bir şey hakkında hiçbir fikrim yok:
<div className="wrapper searchDiv {this.state.something}">
...
</div>
Herhangi bir fikir?
Yanıtlar:
Bunu normal JavaScript’te yapabilirsiniz:
className={'wrapper searchDiv ' + this.state.something}
veya dize şablon sürümü, ters tırnaklarla:
className={`wrapper searchDiv ${this.state.something}`}
Her iki tür de elbette sadece JavaScript'tir, ancak ilk desen geleneksel türdür.
Her neyse, JSX'te, süslü parantez içindeki herhangi bir şey JavaScript olarak yürütülür, böylece temelde orada ne istersen yapabilirsiniz. Ancak JSX dizelerini ve kıvırcık köşeli parantezleri birleştirmek , öznitelikler için işe yaramaz .
element.classList.add("my-class")
; Bu nedenle:className={`wrapper searchDiv ${this.state.something ? "my-class " : ""} ${this.state.somethingElse ? "my-other-class " : ""}`}
className={'wrapper searchDiv} + this.state.isTrue ? 'my-class' : ' '
Bu işe yaramıyor. Neden biri söyleyebilir mi?
Projeniz büyüdükçe kaç tane dinamik sınıf eklemeniz gerektiğine bağlı olarak , GitHub'daki JedWatson'un sınıf adları yardımcı programına bakmaya değer . Koşullu sınıflarınızı bir nesne olarak temsil etmenizi sağlar ve doğru olarak değerlendirilenleri döndürür.
React belgelerinden bir örnek olarak:
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>;
}
React, bir durum değişikliği olduğunda yeniden oluşturmayı tetiklediğinden, dinamik sınıf adlarınız doğal olarak işlenir ve bileşeninizin durumu ile güncel kalır.
İşte Dinamik className için En İyi Seçenek, sadece Javascript'te yaptığımız gibi birleştirme yapın.
className={
"badge " +
(this.state.value ? "badge-primary " : "badge-danger ") +
" m-4"
}
Durum durumuna göre görünmesi gereken stil adlarına ihtiyacınız varsa, bu yapıyı kullanmayı tercih ederim:
<div className={'wrapper searchDiv' + (this.state.something === "a" ? " anotherClass" : "")'}>
kanca kullanarak deneyin:
const [dynamicClasses, setDynamicClasses] = React.useState([
"dynamicClass1", "dynamicClass2
]);
ve className özniteliğine ekleyin:
<div className=`wrapper searchDiv ${[...dynamicClasses]}`>
...
</div>
sınıf eklemek için:
const addClass = newClass => {
setDynamicClasses([...dynamicClasses, newClass])
}
sınıfı silmek için:
const deleteClass= classToDelete => {
setDynamicClasses(dynamicClasses.filter(class = > {
class !== classToDelete
}));
}
Bu npm paketini kullanabilirsiniz . Her şeyi idare eder ve bir değişkene veya işleve dayalı statik ve dinamik sınıflar için seçeneklere sahiptir.
// 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')}
Bu çözüm React SPFx içinde denenmiş ve test edilmiştir.
Ayrıca içe aktarma ifadesi ekleyin:
import { css } from 'office-ui-fabric-react/lib/Utilities';