JavaScript in JSX with Curly Braces
JSX vam dovoljava da pišete HTML-sličnu oznaku unutar JavaScript dokumenta, čime se logika i sadržaj prikaza drže na istom meestu. Ponekad ćete hteti dodati malo JavaScript logike ili referencirati dinamično svojstvo unutar te oznake. U ovoj situaciji možete koristiti vitičaste zagrade u JSX-u da biste otvorili prozor u JavaScript.
Naučićete:
- Kako da prosledite stringove sa navodnicima
- Kako da referencirate JavaScript promenljivu unutar JSX-a sa vitičastim zagradama
- Kako da pozovete JavaScript funkciju unutar JSX-a sa vitičastim zagradama
- Kako da koristite JavaScript objekat unutar JSX-a sa vitičastim zagradama
Prosleđivanje stringova sa navodnicima
Kada želite da prosledite string atribut JSX-u, stavite ga u jednostruke ili dvostruke navodnike:
export default function Avatar() { return ( <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> ); }
Ovde, "https://i.imgur.com/7vQD0fPs.jpg"
i "Gregorio Y. Zara"
se prosleđuju kao stringovi.
Ali šta ako želite da dinamički odredite src
ili alt
tekst? Možete koristiti vrednost iz JavaScript-a zamenom "
i "
sa {
i }
:
export default function Avatar() { const avatar = 'https://i.imgur.com/7vQD0fPs.jpg'; const opis = 'Gregorio Y. Zara'; return ( <img className="avatar" src={avatar} alt={opis} /> ); }
Primećujete razliku između className="avatar"
, što određuje CSS klasu "avatar"
koja čini sliku okruglom, i src={avatar}
koja čita vrednost JavaScript promenljive koja se zove avatar
. To je zato što vitičaste zagrade vam dozvoljavaju da radite sa JavaScript-om upravo tamo u vašem markup-u!
Koristite vitičaste zagrade: Prozor u JavaScript svet
JSX je specijalan način pisanja JavaScript-a. To znači da je moguće koristiti JavaScript unutar njega - sa vitičastim zagradama { }
. Primer ispod prvo deklariše ime za naučnika, ime
, a zatim ga ugnezduje(nest) sa vitičastim zagradama unutar <h1>
:
export default function TodoList() { const ime = 'Gregorio Y. Zara'; return ( <h1>{ime} spisak stvari za uraditi</h1> ); }
Pokušajte da promenite vrednost ime
iz 'Gregorio Y. Zara'
u 'Hedy Lamarr'
. Pogledajte kako se naslov liste menja?
Bilo koja JavaScript ekspresija će raditi između vitičastih zagrada, uključujući pozive funkcija kao što je formatDate()
:
const today = new Date(); function formatDate(date) { return new Intl.DateTimeFormat( 'en-US', { weekday: 'long' } ).format(date); } export default function TodoList() { return ( <h1>Lista stvar iza uraditi za {formatDate(today)}</h1> ); }
Gde koristiti vitičaste zagrade
Možete koristiti vitičaste zagrade samo na dva načina unutar JSX-a:
- Kao tekst direktno unutar JSX oznake:
<h1>{ime}l ista za uraditi</h1>
radi, ali<{tag}>Gregorio Y. Zara lista stvari za uraditi</{tag}>
neće. - Kao atribute odmah ispraćene znakom
=
:src={avatar}
će pročitati promenljivuavatar
, alisrc="{avatar}"
će proslediti string"{avatar}"
.
Koristite “duple vitičaste zagrade”: CSS i drugi objekti u JSX-u
Uz stringove, brojeve i druge JavaScript ekspresije, možete čak proslediti i objekte u JSX. Objekti se takođe označavaju vitičastim zagradama, kao { ime: "Hedy Lamarr", izumi: 5 }
. Stoga, da biste prosledili JS objekat u JSX, morate da umotate objekat u još jedan par vitičastih zagrada: osoba={{ ime: "Hedy Lamarr", izumi: 5 }}
.
Možda ćete videti ovo sa inline CSS stilovima u JSX-u. React ne zahteva da koristite inline stilove (CSS klase rade odlično za većinu slučajeva). Ali kada vam je potreban inline stil, prosledite objekat atributu style
:
export default function TodoList() { return ( <ul style={{ backgroundColor: 'black', color: 'pink' }}> <li>Unaprediti video-telefon</li> <li>Pripremiti predavanja iz aeronautike</li> <li>Raditi na motoru na alkohol</li> </ul> ); }
Pokušajte da promenite vrednosti backgroundColor
i color
.
Stvarno možete videti JavaScript objekat unutar vitičastih zagrada kada ga napišete ovako:
<ul style={
{
backgroundColor: 'black',
color: 'pink'
}
}>
Sledeći put kada vidite {{
i }}
u JSX-u, znajte da je to ništa više od objekta unutar JSX vitičastih zagrada!
Još zabave sa JavaScript objektima i vitičastim zagradama
Možete da prosledite više JavaScript ekspresija u jedan objekat, i da ih referencirate u vašem JSX-u unutar vitičastih zagrada:
const osoba = { ime: 'Gregorio Y. Zara', tema: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={osoba.tema}> <h1>{osoba.ime} lista</h1> <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>Unaprediti video-telefon</li> <li>Pripremiti predavanja iz aeronautike</li> <li>Raditi na motoru na alkohol</li> </ul> </div> ); }
U ovom primeru JavaScript objekat osoba
sadrži string ime
i objekat tema
:
const osoba = {
ime: 'Gregorio Y. Zara',
tema: {
backgroundColor: 'black',
color: 'pink'
}
};
Komponenta može da koristi ove vrednosti iz osoba
ovako:
<div style={osoba.tema}>
<h1>{osoba.ime}' lista</h1>
JSX je veoma minimalan kao jezik za šabloniranje jer vam omogućava da organizujete podatke i logiku koristeći JavaScript.
Recap
Sada znate skoro sve o JSX-u:
- JSX atributi unutar navodnika se prosleđuju kao stringovi.
- Vitičaste zagrade vam omogućavaju da unesete JavaScript logiku i promenljive u vaš markup.
- One rade unutar JSX oznake ili odmah nakon
=
u atributima. {{
i}}
nisu specijalna sintaksa: to je JavaScript objekat koji je umotan u JSX vitičaste zagrade.
Challenge 1 of 3: Popravite grešku
Ovaj kod ne radi sa greškom koja kaže Objects are not valid as a React child
:
const osoba = { ime: 'Gregorio Y. Zara', tema: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={osoba.tema}> <h1>{osoba}' lista</h1> <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>Unaprediti video-telefon</li> <li>Pripremiti predavanja iz aeronautike</li> <li>Raditi na motoru na alkohol</li> </ul> </div> ); }
Možete li da nađete problem?