Wie kann ich mit React eine Klasse per Klick umschalten?
Lesezeit: 6 Minuten
Peter Flanagan
Ich versuche herauszufinden, wie man eine aktive Klasse beim Klicken umschaltet, um CSS-Eigenschaften zu ändern.
Mein Code ist unten. Kann mir jemand raten, wie ich das machen soll? Ist es möglich, dies zu tun, ohne für jedes Element eine neue Komponente zu erstellen?
class Test extends Component(){
constructor(props) {
super(props);
this.addActiveClass= this.addActiveClass.bind(this);
}
addActiveClass() {
//not sure what to do here
}
render() {
<div>
<div onClick={this.addActiveClass}>
<p>1</p>
</div>
<div onClick={this.addActiveClass}>
<p>2</p>
</div>
<div onClick={this.addActiveClass}>
<p>3</p>
</div>
</div>
}
}
Ich habe die Komponente aufgebrochen, aber das fügt noch hinzu active zu jedem Element per Klick. Ich möchte, dass nur ein Element eine aktive Klasse hat
– Peter Flanagan
6. März 2017 um 17:32 Uhr
Dies kann nicht als umgeschaltete “aktive” Klasse bezeichnet werden, da die aktiven Klassen anderer Elemente immer noch vorhanden sind.
– Dat TT
17. April 2018 um 14:26 Uhr
können Sie bitte die zu verwendende Antwort aktualisieren onClick im Gegensatz zu allen Kleinbuchstaben, wie Sie falsch geschrieben haben
Denken Sie nur daran, dass Pfeilfunktionen eine ES6-Funktion sind, und denken Sie daran, sie einzustellen this.state.active Wert im Klassenkonstruktor.
this.state = { active: false }
Oder wenn Sie CSS in JSX einfügen möchten, können Sie dies folgendermaßen tun:
Und Sie können die Stil-JSON-Variable deklarieren:
const style = { button: { background:'red' } }
Denken Sie daran, camelCase für JSX-Stylesheets zu verwenden.
Bane Bojanić
Nun, Ihre addActiveClass muss wissen, worauf geklickt wurde. So etwas könnte funktionieren (beachten Sie, dass ich die Informationen, welche Divs aktiv sind, als Statusarray hinzugefügt habe und dass onClick nun die Informationen, auf die geklickt wurde, als Parameter übergibt, wonach der Status entsprechend aktualisiert wird – es gibt sicherlich intelligentere Möglichkeiten dazu mach es, aber du verstehst die Idee).
In Ihrer Komponentenverwendung this.state.isActive zu rendern, was Sie brauchen.
Dies wird komplizierter, wenn Sie den Status in Komponente Nr. 1 festlegen und ihn in Komponente Nr. 2 verwenden möchten. Graben Sie einfach mehr in den unidirektionalen Datenfluss und möglicherweise Redux, das Ihnen hilft, damit umzugehen.
Ich verstehe state Dies erklärt jedoch immer noch nicht wirklich, wie der Klassenname aktualisiert wird, wenn auf ein Element geklickt wird
– Peter Flanagan
6. März 2017 um 16:35 Uhr
in Ihrem jsx-Markup tun – <div className={this.state.isActive ? 'active' : ''}>. Es geht um bedingtes Rendern, ist aber immer noch auf den Zustand angewiesen.
– Dhorelik
6. März 2017 um 16:38 Uhr
aber das fügt die aktive Klasse jedem Element beim Klicken hinzu. Ich möchte nur, dass das Element angeklickt wird active Klassenname
– Peter Flanagan
6. März 2017 um 16:41 Uhr
warum jeder artikel? Die Klasse wird dem Element hinzugefügt, für das Sie die Bedingung hinzufügen. Idealerweise sollten Ihre Artikel auf die abstrahiert sein Item Komponente. Sie fügen es dann dreimal ein und haben im Grunde drei Elemente, von denen jedes sein eigenes hat isActive Zustand. Ist es das, was du meinst?
– Dhorelik
6. März 2017 um 16:47 Uhr
ohne es in eine aufzuspalten Item Komponente gibt es eine Möglichkeit, dies zu tun?
– Peter Flanagan
6. März 2017 um 16:51 Uhr
Rizwan
Mit React können Sie jeder ID / jedem Element eine Toggle-Klasse hinzufügen, versuchen Sie es
style.css
.hide-text{
display: none !important;
/* transition: 2s all ease-in 0.9s; */
}
.left-menu-main-link{
transition: all ease-in 0.4s;
}
.leftbar-open{
width: 240px;
min-width: 240px;
/* transition: all ease-in 0.4s; */
}
.leftbar-close{
width: 88px;
min-width:88px;
transition: all ease-in 0.4s;
}
Ich verstehe state Dies erklärt jedoch immer noch nicht wirklich, wie der Klassenname aktualisiert wird, wenn auf ein Element geklickt wird
– Peter Flanagan
6. März 2017 um 16:35 Uhr
in Ihrem jsx-Markup tun – <div className={this.state.isActive ? 'active' : ''}>. Es geht um bedingtes Rendern, ist aber immer noch auf den Zustand angewiesen.
– Dhorelik
6. März 2017 um 16:38 Uhr
aber das fügt die aktive Klasse jedem Element beim Klicken hinzu. Ich möchte nur, dass das Element angeklickt wird active Klassenname
– Peter Flanagan
6. März 2017 um 16:41 Uhr
warum jeder artikel? Die Klasse wird dem Element hinzugefügt, für das Sie die Bedingung hinzufügen. Idealerweise sollten Ihre Artikel auf die abstrahiert sein Item Komponente. Sie fügen es dann dreimal ein und haben im Grunde drei Elemente, von denen jedes sein eigenes hat isActive Zustand. Ist es das, was du meinst?
– Dhorelik
6. März 2017 um 16:47 Uhr
ohne es in eine aufzuspalten Item Komponente gibt es eine Möglichkeit, dies zu tun?