JavaScriptia JSX:ssa aaltosulkeilla
JSX:lla voit kirjoittaa HTML-tyylistä merkintäkoodia JavaScript tiedoston sisällä, pitäen renderöintilogiikan ja sisällön samassa paikassa. Joksus haluat käyttää vain vähän JavaScript logiikkaa tai viitata dynaamiseen muuttujaan merkintäkoodin sisällä. Tässä tilanteessa voit käyttää aaltosulkeita JSX koodissasi avataksesi ikkunan JavaScriptiin.
Tulet oppimaan
- Miten välität merkkijonoja heittomerkeillä
- Miten viittaat JavaScript muuttujaan JSX:n sisällä aaltosulkeilla
- Miten kutsut JavaScript funktiota JSX:n sisällä aaltosulkeilla
- Miten käytät JavaScript oliota JSX:n sisällä aaltosulkeilla
Merkkijonojen välittäminen heittomerkeillä
Kun haluat välittää merkkijonoattribuutin JSX koodissa, voit käyttää heittomerkkejä tai lainausmerkkejä:
export default function Avatar() { return ( <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> ); }
Tässä "https://i.imgur.com/7vQD0fPs.jpg"
ja "Gregorio Y. Zara"
välitetään merkkijonoina.
Mutta entä jos haluat dynaamisesti määritellä src
tai alt
tekstit? Voit käyttää JavaScript arvoja korvaamalla "
ja "
merkeillä {
ja }
:
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} /> ); }
Huomaa className="avatar"
määrittelee "avatar"
CSS luokan nimen joka tekee kuvasta pyöreän ja src={avatar}
joka lukee JavaScript muuttujan avatar
arvon. Tämä tapahtuu siksi koska aaltosulkeilla voit käyttää JavaScriptia suoraan merkintäkoodissasi.
Aaltosulkeiden käyttö: Ikkuna JavaScriptin maailmaan
JSX on erityinen tapa kirjoittaa JavaScriptia. Se tarkoittaa, että on mahdollista käyttää JavaScriptia sen sisällä—aaltosulkeilla { }
. Alla oleva esimerkki ensiksi määrittelee nimen name
tutkijalle, sitten upottaa sen aaltosulkeilla <h1>
tagin sisälle:
export default function TodoList() { const name = 'Gregorio Y. Zara'; return ( <h1>{name}'s To Do List</h1> ); }
Kokeile muuttaa name
:n arvoa arvosta 'Gregorio Y. Zara'
arvoksi 'Hedy Lamarr'
. Huomaatko miten listan otsikko muuttuu?
Mikä tahansa JavaScript -lauseke toimii aaltosulkeiden välissä, mukaanlukien funktiokutsut kuten formatDate()
:
const today = new Date(); function formatDate(date) { return new Intl.DateTimeFormat( 'en-US', { weekday: 'long' } ).format(date); } export default function TodoList() { return ( <h1>To Do List for {formatDate(today)}</h1> ); }
Missä käyttää aaltosulkeita
Voit käyttää aaltosulkeita JSX:n sisällä kahdella tavalla:
- Tekstinä suoraan JSX tagin sisällä:
<h1>{name}'s To Do List</h1>
toimii, mutta<{tag}>Gregorio Y. Zara's To Do List</{tag}>
ei toimi. - Attribuutteina heti
=
merkin jälkeen:src={avatar}
lukeeavatar
muuttujan, muttasrc="{avatar}"
välittää merkkijonon{avatar}
.
Kaksoisaaltosulkeiden käyttö: CSS ja muut oliot JSX:ssä
Merkkijonojen, numeroiden sekä muiden JavaScript lauseiden lisäksi voit antaa oliota JSX:ssä. Oliot myös merkitään aaltosulkeilla, kuten { name: "Hedy Lamarr", inventions: 5 }
. Siksi, jotta voit välittää JS olion JSX:ssä, joudutaan käärimään olio toisien aaltosukleiden sisään: person={{ name: "Hedy Lamarr", inventions: 5 }}
.
Saatat nähdä tämän rivinsisäisissä CSS tyyleissä JSX:ssä. React ei pakota rivinsisäisten tyylien käyttöä (CSS luokat toimivat hyvin useimmissa tilanteissa). Mutta kun tarvitset rivinsisäisiä tyylejä, voit välittää olion style
attribuutille seuraavasti:
export default function TodoList() { return ( <ul style={{ backgroundColor: 'black', color: 'pink' }}> <li>Improve the videophone</li> <li>Prepare aeronautics lectures</li> <li>Work on the alcohol-fuelled engine</li> </ul> ); }
Kokeile muuttaa backgroundColor
ja color
arvoja.
Erotat kunnolla JavaScript olion aaltosulkeiden sisällä kun kirjoitat sen seuraavasti:
<ul style={
{
backgroundColor: 'black',
color: 'pink'
}
}>
Seuraavalla kertaa kun näet {{
ja }}
JSX:ssä, tiedät että se tarkoittaa vain oliota JSX:ssä aaltosulkeiden sisällä!
Lisää hauskuutta JavaScript olioilla ja aaltosulkeilla
Voit siirtää useita lauseita yhteen olioon ja viitata niihin JSX koodissasi aaltosulkeissa:
const person = { name: 'Gregorio Y. Zara', theme: { backgroundColor: 'black', color: 'pink' } }; export default function TodoList() { return ( <div style={person.theme}> <h1>{person.name}'s Todos</h1> <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>Improve the videophone</li> <li>Prepare aeronautics lectures</li> <li>Work on the alcohol-fuelled engine</li> </ul> </div> ); }
Tässä esimerkissä person
JavaScript olio sisältää name
merkkijonon ja theme
olion:
const person = {
name: 'Gregorio Y. Zara',
theme: {
backgroundColor: 'black',
color: 'pink'
}
};
Komponentti voi käyttää näitä arvoja person
oliosta seuraavasti:
<div style={person.theme}>
<h1>{person.name}'s Todos</h1>
JSX on minimaalinen mallinnuskieli, koska sen avulla voi järjestää dataa ja logiikkaa JavaScriptia käyttämällä.
Kertaus
Nyt tiedät melkein kaiken JSX:stä:
- JSX attribuutit heittomerkkien välissä välitetään merkkijonona.
- Aaltosulkeilla tuot JavaScript logiikan ja muuttujat merkintäkoodiin.
- Ne toimivat JSX tagien sisällä sisältönä tai suoraan
=
merkin jälkeen attribuuteissa. {{
ja}}
ei ole erityistä syntaksia: se on JavaScriptin olio JSX aaltosulkeiden sisällä.
Haaste 1 / 3: Korjaa ongelma
Tämä koodi kaatuu virheellä 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}'s Todos</h1> <img className="avatar" src="https://i.imgur.com/7vQD0fPs.jpg" alt="Gregorio Y. Zara" /> <ul> <li>Improve the videophone</li> <li>Prepare aeronautics lectures</li> <li>Work on the alcohol-fuelled engine</li> </ul> </div> ); }
Löydätkö ongelman?