Komponenttien importtaus ja exporttaus
Komponenttien taika perustuu niiden uudelleenkäytettävyyteen: voit luoda komponentteja, jotka koostuvat toisista komponenteista. Mutta kun upotat enemmän ja enemmän komponentteja, on usein järkevää hajottaa niitä eri tiedostoihin. Näin voit pitää tiedostot helppolukuisina ja uudelleenkäyttää komponentteja useammissa paikoissa.
Tulet oppimaan
- Mikä juurikomponenttitiedosto on
- Miten importata ja exportata komponentti
- Milloin käyttää default exportteja sekä nimettyjä importteja ja exportteja
- Miten importata ja exportata useita komponentteja yhdestä tiedostosta
- Miten hajottaa komponentti useisiin tiedostoihin
Juurikomponenttitiedosto
Ensimmäinen komponenttisi -sivulla teit Profile
komponentin sekä Gallery
komponentin joka renderöi sen:
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> ); }
Tässä esimerkissä nämä löytyvät juurikomponenttitiedostosta nimeltään App.js
. Riippuen asennuksestasi, juurikomponenttisi saattaa olla toisessa tiedostossa. Jos käytät ohkelmistokehystä, jossa on tiedostopohjainen reititys, kuten Next.js, juurikomponenttisi on eri jokaiselle sivulle.
Komponentin exporttaus ja importtaus
Mitä jos haluat muuttaa laskeutumissivua tulevaisuudessa ja asettaa listan tiedekirjoista siihen? Tai siirtää kaikki profiilit jonnekin muualle? On järkevää siirtää Gallery
ja Profile
pois juurikomponentin tiedostosta. Tämä tekee niistä modulaarisempia ja uudelleenkäytettäviä muissa tiedostoissa. Voit siirtää komponentin kolmessa vaiheessa:
- Luo uusi JS tiedosto johon komponentin voi laittaa.
- Exporttaa funktiokomponenttisi tiedostosta (käyttämällä joko default tai nimettyjä exportteja).
- Importtaa se tiedostoon, jossa tulet käyttämään komponenttia (käyttäen vastaavaa tapaa default tai nimettyjen exporttien importtaukseen).
Tässä sekä Profile
että Gallery
on siirretty pois App.js
tiedostosta uuteen tiedostoon nimeltään Gallery.js
. Nyt voit muuttaa App.js
importtaamaan Gallery
komponentin Gallery.js
tiedostosta:
import Gallery from './Gallery.js'; export default function App() { return ( <Gallery /> ); }
Huomaa miten tämä esimerkki jakautuu kahteen komponenttitiedostoon:
Gallery.js
:- Määrittelee
Profile
komponentin, jota käytetään vain tiedoston sisällä eikä sitä ole exportattu. - Exporttaa
Gallery
komponentin default exporttina.
- Määrittelee
App.js
:- Importtaa
Gallery
:n default importtinaGallery.js
tiedostosta. - Exporttaa juuri
App
komponentin default exporttina.
- Importtaa
Syväsukellus
JavaScriptissa on kaksi ensisijaista tapaa exportata arvoja: default exportit ja nimetyt exportit. Tähän mennessä esimerkit ovat käyttäneet ainoastaan default exportteja. Voit kuitenkin käyttää jompaa kumpaa tai molempia samassa tiedostossa. Tiedostossa voi olla ainoastaan yksi default exportti, mutta sillä voi olla niin monta nimettyä exporttia kuin haluat.
Miten exporttaat komponenttisi määrää miten se täytyy importata. Saat virheen jos yrität importata default exporttia samalla tavalla kuin nimettyä exporttia! Tämän kaavion avulla voit seurata tapoja:
Syntaksi | Export-lause | Import-lause |
---|---|---|
Default | export default function Button() {} | import Button from './Button.js'; |
Nimetty | export function Button() {} | import { Button } from './Button.js'; |
Kun kirjoitat default importtia, voit antaa sille minkä tahansa nimen import
:n jälkeen. Esimerkiksi, voit kirjoittaa import Banana from './button.js'
ja se silti tarjoaa saman default exportin. Verrattuna nimettyihin importteihin, nimen on vastattava toisiaan molemmin puolin. Siksi niitä kutsutaan nimetyiksi importeiksi!
Ihmiset usein käyttävät default exportteja jos tiedosto exporttaa ainoastaan yhden komponentin, ja käytävät nimettyjä exportteja jos se exporttaa useita kompoenntteja ja arvoja. Riippumatta siitä kumpaa koodityyliä suosit, anna aina merkityksellisiä nimiä komponenteillesi ja tiedostoille jotka pitävät niitä sisällään. Komponentin ilman nimiä, kuten export default () => {}
ei suosita sillä ne tekevät virheenkorjauksesta hankalempaa.
Useiden komponenttien exporttaus ja importtaus samasta tiedostosta
Mitä jos haluat näyttää vain yhden Profile
:n gallerian sijaan? Sinun täytyy exportata Profile
komponentti, myös. Mutta Gallery.js
tiedostossa on jo default exportti, ja sinulla ei voi olla kahta default exporttia. Voit luoda uuden tiedoston, jossa on default exportti, tai voit lisätä nimetyn exportin Profile
:lle. Tiedosto voi pitää sisällään vain yhden default exportin, mutta se voi sisältää useita nimettyjä exportteja!
Ensiksi, exporttaa Profile
tiedostosta Gallery.js
käyttämällä nimettyä exporttia (ei default
avainsanaa):
export function Profile() {
// ...
}
Sitten importtaa Profile
tiedostosta Gallery.js
tiedostoon App.js
käyttäen nimettyä importtia (aaltosulkeilla):
import { Profile } from './Gallery.js';
Lopuksi renderöi <Profile />
komponentista App
:
export default function App() {
return <Profile />;
}
Nyt Gallery.js
sisältää kaksi exporttia: default Gallery
exportin, sekä nimetyn Profile
exportin. App.js
importtaa molemmat näistä. Kokeile muokata <Profile />
lukemaan <Gallery />
tässä esimerkissä:
import Gallery from './Gallery.js'; import { Profile } from './Gallery.js'; export default function App() { return ( <Profile /> ); }
Käytät nyt nimettyjä ja default exportteja yhdessä:
Gallery.js
:- Exporttaa
Profile
komponentin nimettynä exporttina nimeltäänProfile
. - Exporttaa
Gallery
komponentin default exporttina.
- Exporttaa
App.js
:- Importtaa
Profile
:n nimettynä importtina nimeltäänProfile
tiedostostaGallery.js
. - Importtaa
Gallery
:n default importtina tiedostostaGallery.js
. - Exporttaa juuri
App
komponentin default exporttina.
- Importtaa
Kertaus
Tällä sivulla opit:
- Mikä juurikomponenttitiedosto on
- Miten importata ja exportata komponentti
- Milloin käyttää default exportteja sekä nimettyjä importteja ja exportteja
- Miten exportata useita komponentteja yhdestä tiedostosta
Haaste 1 / 1: Jaa komponentteja edelleen
Tällä hetkellä Gallery.js
exporttaa molemmat Profile
:n sekä Gallery
:n, joka on hieman sekavaa.
Siirrä Profile
komponentti sen omaan Profile.js
tiedostoon ja sitten muuta App
komponentti renderöimään molemmat <Profile />
ja <Gallery />
yksi toisensa jälkeen.
Voit käyttää joko default tai nimettyä exporttia Profile
komponentille, mutta varmista, että käytät vastaavaa import-syntaksia sekä App.js
että Gallery.js
tiedostoissa! Voit viitata taulukkoon:
Syntaksi | Export-lause | Import-lause |
---|---|---|
Default | export default function Button() {} | import Button from './Button.js'; |
Nimetty | export function Button() {} | import { Button } from './Button.js'; |
// Siirä minut Profile.js tiedostoon! export function Profile() { return ( <img src="https://i.imgur.com/QIrZWGIs.jpg" alt="Alan L. Hart" /> ); } export default function Gallery() { return ( <section> <h1>Amazing scientists</h1> <Profile /> <Profile /> <Profile /> </section> ); }
Kun olet saanut sen toimimaan toisella exportilla, varmista, että se toimii toisellakin tapaa.