Tietojen välitys komponentille
Seuraavaksi tutustumme siihen, miten tietoja voidaan välittää React-komponentille ja miten välitettyjä tietoja voidaan hyödyntää.
-
Luo components-kansioon uusi
Balance.jsx-niminen tiedosto ja liitä sen sisällöksi seuraava ohjelmakoodi.function Balance(props) { // Poimitaan komponentille välitetty total-arvo const total = props.total; return ( <div className="balance"> <div>lemons</div> <div className="balance_total">{total}</div> </div> ); } export default Balance;Tämä koodi on rakenteeltaan samankaltainen edellä lisätyn Lemon-komponentin kanssa. Keskeisin ero on se, että funktiolla on
props-niminen parametri. Tämä on erityismuuttuja, johon React kerää kaikki komponentin kutsun yhteydessä välitetyt arvot.Esimerkiksi jos komponenttia kutsutaan
<Balance total="42" />, niin props-muuttujasta löytyytotal-niminen avain ja sen arvona teksti42. Vastaavasti jos komponenttia kutsutaan<Balance kind="neutral">, niin props-muuttujasta löytyykind-niminen avain arvollaneutral.Tätä toiminnallisuutta hyödynnetään funktiokoodissa ennen return-lausetta, jossa haetaan komponentille
total-määritteellä välitetty tieto. Tämä arvo tallennetaan vakioon, joka tulostetaan return-lauseen sisällä. Muuttujan arvo tulostetaan JSX-koodissa sijoittamalla muuttujan nimi aaltosulkeiden sisälle, kuten esimerkiksi{total}. -
Muokkaa src-kansiossa olevaa App.jsx-tiedostoa. Lisää tiedoston alkuun seuraava ohjelmarivi.
import Balance from './components/Balance';import-rivien järjestyksellä ei ole merkitystä, mutta nekin kannattaa järjestää jonkin logiikan perusteella. Tässä projektissa komponentit tuodaan aakkosjärjestyksessä ja niiden jälkeen muut sisällöt.
Muuta komponentin return-lause seuraavan kaltaiseksi:
return ( <> <div> <Balance total="157" /> <Lemon /> </div> </> )Edellä kutsutaan Balance-komponenttia ja sille välitetään kutsun yhteydessä arvo 157.
-
Avaa sovellus selaimessa. Nyt sitruunan yläpuolelle on ilmestynyt lemons-teksti ja sen alapuolelle luku. Voit testata komponentin toimintaan vaihtamalla total-määritteen arvoa App.jsx -komponentissa.
Jos tutkit tarkemmin Balance-komponentin lähdekoodia, niin huomaat, että uloimmassa div-elementti on määritelty kuuluvan luokkaan
balanceja sisemmässä on luokkamääritteenäbalance_total. Tässä noudatetaan löyhästi BEM-nimeämiskäytäntöä, jossa nimen ensimmäinen osa määrittelee kokonaisuuden (block), toinen osa elementin kokonaisuuden sisällä (element). Nimelle on mahdollista määritellä myös kolmaskin osa (modifier), mutta tähän palaamme projektin myöhemmässä vaiheessa.Tässä projektissa kokonaisuus (block) on käytännössä sama kuin komponentin nimi (mutta pienillä kirjaimilla kirjoitettuna) eli
Balance-komponentin luokka onbalance. Komponentin sisällä olevia asioita on määritelty lisänimellä, kuten esimerkiksibalance_total. Tällä tavalla luokkatunnisteesta pystyy suoraan päättelemään, mille komponentille se kuuluu.
Muutosten vienti versiohallintaan
Viedään viimeisimmät muutokset versiohallintaan.
git add .
git commit -m "lisää Balance-komponentin"
Toteutushaaste 1
Seuraavaksi toteutamme Booster-komponentin aivan samalla periaatteella kuin edellä toteutetun Balance-komponentin.
Ennen kuin siirryt seuraavaan osioon, niin kokeile toteuttaa Booster-niminen komponentti, joka saa kutsun yhteydessä value-määritteellä arvon. Komponentin tyylimääritykset löytyvät booster-luokan alta.
Mallin Booster-luokan tulostamasta tekstistä löydät Funktiokomponentti-sivulta.
lisää Balance-komponentin -commit