Komponentit ovat yksi Reactin ydinkonsepteista. Ne ovat perusta minkä päälle rakennat käyttöliittymiä (UI), mikä tekee niistä täydellisen paikan aloittaa Reactin oppiminen!

Tulet oppimaan

  • Mikä on komponentti
  • Mikä rooli komponenteilla on React-sovelluksessa
  • Miten kirjoittaa ensimmäinen komponenttisi

Komponentit: UI:n rakennuspalikoita

Verkkossa HTML antaa meidän luoda monipuoliset jäsennellyt dokumentit sen sisäänrakennetuilla tageilla kuten <h1> ja <li>:

<article>
<h1>Ensimmäinen komponenttini</h1>
<ol>
<li>Komponentit: UI:n rakennuspalikoita</li>
<li>Komponentin määrittely</li>
<li>Komponentin käyttäminen</li>
</ol>
</article>

Tämä merkintä edustaa tätä artikkelia <article>, sen otsikkoa <h1>, ja (lyhennettyä) sisällysluetteloa järjestettynä listana <ol>. Tämänkaltainen merkintä yhdistettynä CSS:ään tyylejä varten ja JavaScriptiin vuorovaikutteisuutta varten, löytyy jokaisen sivupalkin, avatarin, modaalilaatikon ja pudotusvalikon takaa—kaikki palaset UI:ta verkossa jota näet.

Reactilla voit yhdistää merkinnän, CSS ja JavaScriptin mukautetuiksi “komponenteiksi,” uudelleenkäytettäviksi UI elementeiksi sovelluksellesi. Sisällysluettelon koodi yllä voitaisiin muuttaa <TableOfContents> komponentiksi, jota voisit renderöidä jokaisella sivulla. Konepellin alla se käyttää silti samoja HTML tageja, kuten <article>, <h1>, jne.

Kuten HTML tageilla, voit luoda, järjestää ja upottaa komponentteja koko sivun suunnittelua varten. Esimerkiksi, dokumentaatio jota luet koostuu React komponenteista:

<PageLayout>
<NavigationHeader>
<SearchBar />
<Link to="/docs">Docs</Link>
</NavigationHeader>
<Sidebar />
<PageContent>
<TableOfContents />
<DocumentationText />
</PageContent>
</PageLayout>

Kun sovelluksesi kasvaa huomaat, että suuri osa malleista voidaan luoda uudelleenkäyttämällä komponentteja joita olet jo kirjoittanut, nopeuttaen kehitystä. Yllä oleva sisällysluettelo voitaisiin lisätä mille tahansa ruudulle kirjoittamalla <TableOfContents>! Voit aloittaa projektisi nopeasti Reactin avoimen lähdekoodin yhteisön jakamien tuhansien komponenttien avulla, kuten Chakra UI:lla ja Material UI:lla.

Komponentin määrittely

Perinteisesti verkkosivuja luodessa kehittäjät lisäsivät merkintäkoodia sisältöön ja sitten lisäsivät toiminnallisuutta ripottelemalla vähän JavaScriptia. Tämä toimi hyvin kun toiminnot olivat mukavuustekijöitä verkossa. Nyt sitä odotetaan monilta sivuilta ja kaikilta sovelluksilta. React laittaa interaktiivisuuden ensiksi käyttäen silti samaa teknologiaa: React komponentti on JavaScript funktio, jota voit ripotella merkintäkoodilla. Tässä miltä se näyttää (voit muokata esimerkkiä alla):

export default function Profile() {
  return (
    <img
      src="https://i.imgur.com/MK3eW3Am.jpg"
      alt="Katherine Johnson"
    />
  )
}

Ja tässä miten rakennat komponentin:

1. Vaihe: Exporttaa komponentti

export default etuliite on vakio JavaScript syntaksi (ei erityisesti Reactille). Sillä voit merkitä pääfunktion tiedostossa, jotta voit myöhemmin importata sen muista tiedostoista. (Lisää importtaamisesta Komponenttien importtaus ja exporttaus -sivulta!)

2. Vaihe: Määritä funktio

Käyttämällä function Profile() { } määrität JavaScript funktion nimeltään Profile..

Sudenkuoppa

React komponentit ovat tavallisia JavaScript funktioita, mutta niiden nimien on alettava isolla alkukirjaimella tai ne eivät toimi!

3. Vaihe: Lisää merkintäkoodia

Komponentti palauttaa <img /> tagin src ja alt attribuuteilla. ` on kirjoitettu kuten HTML:ssä, mutta se on oikeasti JavaScriptia konepellin alla! Tätä syntaksia kutsutaan nimeltään JSX, ja sillä voit upottaa merkintäkoodia JavaScriptissa.

Palautuslause voidaan kirjoittaa yhdellä rivillä, kuten tässä komponentissa:

return <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />;

Mutta jos merkintäkoodisi ei ole samalla rivillä kuin return avainsana, täytyy koodi kääriä sulkujen sisään:

return (
<div>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</div>
);

Sudenkuoppa

Ilman sulkuja, kaikki koodi return avainsanan jälkeen jätetään huomiotta!

Komponentin käyttäminen

Nyt kun olet määritellyt Profile komponentin, voit upottaa sen toisten komponenttien sisään. Esimerkiksi voit exportata Gallery komponentin, joka käyttää useampia Profile komponentteja:

function Profile() {
  return (
    <img
      src="https://i.imgur.com/MK3eW3As.jpg"
      alt="Katherine Johnson"
    />
  );
}

export default function Gallery() {
  return (
    <section>
      <h1>Amazing scientists</h1>
      <Profile />
      <Profile />
      <Profile />
    </section>
  );
}

Mitä selain näkee

Huomaa kirjainkokojen ero:

  • <section> on pienin kirjaimin, joten React tietää viittaamme HTML tagiin.
  • <Profile /> alkaa isolla P kirjaimella, joten React tietää, että haluamme käyttää omaa komponenttiaan nimeltään Profile.

Ja Profile sisältää vielä enemmän HTML koodia: <img />. Lopuksi selain näkee seuraavaa:

<section>
<h1>Amazing scientists</h1>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</section>

Komponenttien upottaminen ja järjestäminen

Komponentit ovat tavallisia JavaScript funktioita, joten voit pitää useita komponentteja samassa tiedostossa. Tämä on hyödyllistä kun komponentit ovat suhteellisen pieniä tai liitttyvät tiiviisti toisiinsa. Jos tämä tiedosto kasvaa suureksi, voit aina siirtää Profile komponentin eri tiedostoon. Tulet oppimaan miten tämän voi tehdä sivulla importeista..

Sillä Profile komponentit renderöidään Gallery komponentin sisällä-jopa useita kertoa!-voimme sanoa, että Gallery on kuin pääkomponentti, joka renderöi jokaisen Profile:n “lapsena”. Tämä on osa Reactin taikaa: voit määritellä komponentin kerran ja käyttää sitä niin monessa paikassa ja niin monta kertaa kuin haluat.

Sudenkuoppa

Komponentit voivat renderöidä toisia komponenttejna, mutta et voi määritellä niitä sisäkkäin:

export default function Galleria() {
// 🔴 Älä määrittele komponenttia toisen komponentin sisällä!
function Profiili() {
// ...
}
// ...
}

Yllä oleva esimerkki on todella hidas ja aiheuttaa bugeja. Sen sijaan, määrittele kaikki komponentit ylätasolla:

export default function Galleria() {
// ...
}

// ✅ Määrittele komponenttisi ylätasolla
function Profiili() {
// ...
}

Kun alakomponentti tarvitsee jotain dataa, välitä se propsien kautta määrittelyjen sisentämisen sijaan

Syväsukellus

Komponentteja loppuun asti

React sovelluksesi alkaa “juurikomponentista”. Useimmiten se luodaan automaattisesti kun aloitat uuden projektin. Esimerkiksi, jos käytät CodeSandbox:ia tai jos käytät Next.js ohjelmistokehystä, juurikomponentti on määritelty pages/index.js tiedostossa. Näissä esimerkissä olet exportannut juurikomponentteja.

Useimmat React sovellukset käyttävät komponentteja loppuun asti. Tämä tarkoittaa, että et ainoastaan käytä komponentteja uudelleenkäytettäviin palasiin kuten painikkeisiin, mutta myös suurempiin paloihin kuten sivuplakkeihin, listoihin ja lopulta kokonaisiin sivuihin! Komponentit ovat näppärä tapa järjestää merkintä- ja UI-koodia vaikka joitain käytettäisiin vain kerran.

React-pohjaiset ohjelmistokehykset vievät tämän askeleen eteenpäin. Sen sijaan, että käyttäisit tyhjää HTML tiedostoa ja annat Reactin “ottaa sivu haltuun” halliten sivua JavaScriptilla, ne *myös generoivat HTML:n autoaattisesti React komponenteistasi. Tämä mahdollistaa sovelluksesi näyttämään sisältöä enne kuin JavaScript koodi on latautunut.

Kuitenkin monet verkkosivut käyttävät Reactia lisätäkseen “ripausta interkatiivisuutta”. Niillä on useita juurikomponentteja yhden sijasta koko verkkosivulle. Voit käyttää niin paljon tai niin vähän Reactia kuin tarvitset.

Kertaus

Olet nyt saanut ensimakua Reactista! Kerrataanpa muutamia keskeisiä kohtia.

  • Reactilla voit luoda komponentteja, uudelleenkäytettäviä UI elementtejä sovelluksellesi.

  • React-sovelluksessa, jokainen pala käyttöliittymää on komponentti.

  • React komponentit ovat tavallisia JavaScript funktioita, paitsi:

    1. Niiden nimien on alettava isolla alkukirjaimella.
    2. Ne palauttavat JSX merkintäkoodia.

Haaste 1 / 4:
Exporttaa komponentti

Tämä hiekkalaatikko ei toimi, koska juurikomponenttia ei ole exportattu:

function Profile() {
  return (
    <img
      src="https://i.imgur.com/lICfvbD.jpg"
      alt="Aklilu Lemma"
    />
  );
}

Kokeile korjata se itse ennen kuin katsot ratkaisua!