JavaScript u JSX-u sa vitičastim zagradama
JSX vam dozvoljava da pišete markup sličan HTML-u unutar JavaScript fajla, čuvajući logiku prikazivanja i sadržaja na istom mestu. Ponekad ćete želeti da dodate malo JavaScript logike ili da referencirate dinamičko svojstvo unutar tog markup-a. U ovoj situaciji možete koristiti vitičaste zagrade u vašem JSX-u da otvorite prozor ka JavaScript-u.
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 description = 'Gregorio Y. Zara'; return ( <img className="avatar" src={avatar} alt={description} /> ); }
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 vam vitičaste zagrade dozvoljavaju da radite sa JavaScript-om upravo 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, name
, a zatim ga ubacuje vitičastim zagradama unutar <h1>
:
export default function TodoList() { const name = 'Gregorio Y. Zara'; return ( <h1>{name} spisak stvari za uraditi</h1> ); }
Pokušajte da promenite vrednost name
iz 'Gregorio Y. Zara'
u 'Hedy Lamarr'
. Pogledajte kako se naslov liste menja?
Bilo koji JavaScript izraz ć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 stvari za 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>{name} lista za uraditi</h1>
radi, ali<{tag}>Gregorio Y. Zara lista stvari za uraditi</{tag}>
neće. - Kao atribute praćen 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 izraze, možete čak proslediti i objekte u JSX. Objekti se takođe označavaju vitičastim zagradama, kao { name: "Hedy Lamarr", inventions: 5 }
. Stoga, da biste prosledili JS objekat u JSX, morate da umotate objekat u još jedan par vitičastih zagrada: person={{ name: "Hedy Lamarr", inventions: 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 u većini 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 izraza u jedan objekat i da ih referencirate u vašem JSX-u unutar vitičastih zagrada:
const person = { name: 'Gregorio Y. Zara', theme: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={person.theme}> <h1>{person.name} 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 person
sadrži string name
i objekat theme
:
const person = {
name: 'Gregorio Y. Zara',
theme: {
backgroundColor: 'black',
color: 'pink'
}
};
Komponenta može da koristi ove vrednosti iz person
ovako:
<div style={person.theme}>
<h1>{person.name} 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.
Izazov 1 od 3: Popraviti grešku
Ovaj kod ne radi sa greškom koja kaže Objects are not valid as a React child
:
const person = { name: 'Gregorio Y. Zara', theme: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={person.theme}> <h1>{person} 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?