JSX en state variabelen 2
We gaan de kleur van de letters aanpassen. De kleur moeten we onthouden en dat doen we in een state variabele
Dynamische CSS in JSX
We gaan nu een knop maken waarmee we de kleur van de tekst (myString) kunnen aanpassen.
We volgen de volgende stappen:
- Knop maken die functie aanroept.
- state variabele maken waarin de kleur wordt vastgelegd.
- In de functie de state variabele aanpassen.
- We maken de stijlen in de css file.
- in de render method de style/class aanpassen; is de state variabele red dan gebruiken we een stijl waarin de tekst in rood wordt afgedrukt en is de state variabele green dan gebruiken we een stijl die de tekst groen maakt.
Stap 1, Knop maken
Allereerst maken we een button. Zet deze na de regel waarop de nummers worden afgedrukt.
<br />
<button onClick={() => this.changeColor() } >Change Color</button>
Als je de code nu runt dan krijg je een foutmelding als je op de knop drukt. Dat komt omdat de method changeColor() (nog) niet bestaat.
Stap 2, State variabele maken
voeg myColor toe als string aan de state variabele, let op dat je wel een komma gebruikt tussen de state variabelen.
this.state = {
myString: '',
myColor: 'red'
}
Stap 3, State variabele aanpassen in functie
Een state variabele mag en kan alleen worden aangepast met een (ingebouwde functie setState(). Dat werkt als volgt:
changeColor() {
if ( this.state.myColor === "red") {
this.setState({ 'myColor': 'green'} );
} else {
this.setState({ 'myColor': 'red'} );
}
}
De setState() method is ingebouwd in React. De state variabelen staan in JSON formaat.
Wat deze functie doet is de variabele myColor op green zetten als die rood is, en op rood zetten als die groen is.
Stap 4, css aanpassen
In de css maken we twee extra classes.
.red {
color: red;
}
.green {
color: green;
}
Stap 5, class dynamisch maken
In de app.js file passen we nu de stijl aan.
De class wordt dus de waarde van de state variabele myColor. Deze is green of red. Deze stijlen heb je in de CSS aangemaakt in stap 4.
De class App is nu weg, laten we die ook nog even toevoegen.
<div className={"App "+this.state.myColor}>
Stel myColor is "red"dan staat er dus className="App red". Dit betekent dat CSS classes App en red worden toegepast.
Je kunt in de CSS file bij de classes red en green natuurlijk veel meer aanpassen. Probeer zelf maar!
Opdracht
Verander de method getNumbers().
getNumbers() {
for (var i=0; i < 10; i++) {
this.state.myString = this.state.myString + "*";
}
}
Nu zie je 10 sterretjes in plaats van de nummers.
Maak nu een tweede button. Telkens als je op de button drukt laat je een extra sterretje zien. De string myString wordt dus telkens iets langer.
--
Quiz
Hoe zou je JSX het beste omschrijven?
Een soort combinatie van JavaScript ES5 en JavaScript ES6.Een soort combinatie van JavaScript en HTMLEen soort combinatie tussen JavaScript en CSSEen soort combinatie tussen JavaScript, HTML en CSS.
Hoe geef je een code blok weer in JSX?
Tussen [ en ] (rechte haken)Tussen ( en ) (ronder haken)Tussen { en } (curly brackets)Tussen < en > (visgraten)
Wat doet de constructor method in een class?
Die wordt aangeroepen als je voor de eerste de class aanroept.Die wordt aangeroepen elke keer als je een class aanroept.Die moet je zelf aanroepen om variabelen te initialiseren.Die wordt aangeroepen als je voldoende vrij geheugen hebt en wordt gebruikt als cache (code wordt daardoor sneller).
Als je in JSX iets wilt 'onthouden' dan gebruik je wat?
De constructor method.Een JSON array.Een variabele.De state variabele.
In JSX is de HTML syntax helemaal hetzelfde als 'gewone' HTML zoals we dat gewend zijn.
ZekerZeker maar je mag alleen hoofdletters gebruikenZeker maar er zijn kleine verschillenclasswordt bijvoorbeeldclassNameZeker alleen zet je HTML blokken tussen { en } (curly brackets).
Wat doet de render method in een JSX class?
Die houd zich bezig met het omzetten van code naar HTMLDie wordt standaard uitgevoerd als je de class aanroept en in de regel wordt daar de output gedefinieerd (soort view uit MVC).Daarin wordt de HTML (opmaak) gecodeerd.Daarin wordt de data uit bijvoorbeeld de database opgehaald. De data wordt dan vervolgens gestyled via destyleNameclass.