I en del av denne opplæringsserien brukte vi create reagere-app
verktøy for å lage en arbeidseksempel-app som utgangspunkt for vår "Movie Mojo" -galleri-app.
I del to, får vi tak i å legge til vår første tilpassede komponent for å vise individuelle filmkort. Vi ser også hvordan bruk av rekvisitter gjør at vi kan tilpasse utseendet på komponenter ved å sende inn data i stedet for å kodes hardt.
Dette demonstrerer fleksibiliteten og gjenbruken av komponenter, og hvordan de kan brukes som kraftige byggeklosser i React apps.
OK, la oss lage en komponent! Til å begynne med holder vi ting ganske enkle og refactor header HTML i sin egen komponent.
Best Practices for Modern React anbefaler å skille ut hver komponent i appen din til en egen fil. Vi følger dette prinsippet så, i dine prosjekter / src / komponenter /
mappe, opprett en ny fil som heter Header.js
og åpne den i et tekstredigeringsprogram.
Øverst på komponentfiler begynner vi alltid ved å importere nødvendige biblioteker, andre komponenter (som vi kan hekse komponenter) og ekstra ressurser vi trenger (for eksempel stilarter). De importere
erklæring er en del av ES6 og lar oss holde prosjektene svært modulære.
For vår
komponent, trenger vi bare å importere React-biblioteket, som vi kan gjøre med denne setningen:
Import React, Component fra 'reagere';
Dette importerer hele React-biblioteket og gjør det tilgjengelig via Reagere
variabel. Det importerer også Komponent
objektet direkte slik at vi kan bruke det uten å kvalifisere det med et forrige Reagere.
objektreferanse.
Med andre ord, hvis vi ikke eksplisitt importerte Komponent
objekt da vi måtte få tilgang til det som følger:
React.Component
Men fordi vi importerte Komponent
direkte, kan vi bare bruke det på egen hånd uten noen henvisning til Reagere
variabel. Det spiller ingen rolle hvilken du bruker, og er bare nede i preferanse.
For å faktisk lage komponenten, utvider vi Komponent
protester mot å lage en ny klasse som definerer vår
komponent. Etter importere
setning, type:
Klasseoverskrift utvider komponent eksport standard App;
Her bruker vi en ES6-klasse som vår komponentbeholder. Klasser er en flott måte å inkapslere all koden som trengs for å beskrive komponenten din.
Du har kanskje også lagt merke til at komponentfilen slutter med en eksportoppgave. Dette, som du kanskje forventer, eksporterer vår komponent og gjør den tilgjengelig for andre filer i vårt prosjekt.
I det minste trenger alle React-komponenter å ha en gjengivelsesmetode, som returnerer noe oppslag. Dette kan være HTML, andre React-komponenter eller en blanding av begge.
Legg til dette i komponentklassen din:
render () return React.createElement ('div', null, 'Hei det, dette er en React-komponent!');
De Hvis du vil bruke en React-komponent i en annen komponent, må vi først importere den, så legg den til listen over importopplysninger øverst på Legg merke til hvordan du ikke trenger å legge til Faktisk, hvis du prøver å bruke Vi kan nå legge til Så dette er ikke tillatt: Hvis du vil returnere flere elementer, må du pakke dem inn i et enkelt innpakningselement: Så sørg for at du legger til Velkommen til "Movie Mojo" React app! Dette vil resultere i vår For å fullføre Du har imidlertid kanskje lagt merke til at det er et problem. I Svaret er JSX. I Slik må vi skrive React-komponenter uten JSX. Faktisk, under hetten, er dette hva JSX er kompilert inn før det kan gjengis til nettleseren. Du er ikke pålagt å bruke JSX i det hele tatt for dine React-komponenter; det er helt opp til deg. Men nesten alle komponenter du kommer over vil bli skrevet i JSX fordi det er bare så mye lettere å skrive. Det er også svært lesbart for andre som er nye i koden din. Tenk deg å måtte studere et React-prosjekt som inneholder dusinvis av forskjellige komponenter skrevet i vanlig JavaScript! Så det bør ikke komme som en overraskelse at vi bruker JSX for komponentdefinisjoner gjennom resten av denne opplæringsserien. Gå videre og erstatt Mens JSX gir oss mye mer fleksibilitet ved å skrive våre komponenter, husk at det ikke er egentlig HTML vi skriver, men en abstraksjon av det. Du kan se dette i kodebiten ovenfor. Merknad i La oss også tilpasse topptekstene. Åpen Dette oppdaterer bakgrunnsfargen på toppteksten og reduserer høyden. Så langt, vår Tenk på komponent rekvisitter som ligner på HTML-koder. For eksempel a Vi kan gjøre det samme for React-komponenter. Si at vi ikke ville ha vår topptekst til å skrive ut den faste teksten 'Discover Your Movie Mojo!' hele tiden. Ville det ikke vært bedre hvis vår overskrift kunne vise noen tekst? I motsetning til HTML-attributter kan vi nevne våre komponent rekvisitter uansett hva vi liker. Innsiden Oppdater deretter Dette resulterer i vår overskrift som viser hvilken tekst som legges til La oss se nærmere på hvordan vi refererte til De krøllete båndene forteller bare JSX at vi har noen JavaScript vi vil evaluere. Dette skiller det fra tekst. Hvis vi ikke brukte noen krøllete braces, strengen bokstavelig De Våre Dette er gode nyheter når du utvikler fremtidige React apps som du kan gjenbruke komponenter fra tidligere prosjekter, slik at du ikke trenger å skrive alt fra grunnen. Vi brukte rekvisitter over for å passere en fast streng i For å sende en variabel via rekvisitter, kan vi gjøre noe slikt, hvor Det er et veldig nyttig verktøy som er tilgjengelig for Chrome-nettleseren, som lar deg inspisere informasjon om React-appen din. Standardutviklerverktøyene lar deg bare vise vanlige HTML-elementer, men med utvidelsen av Utviklerverktøyet for React, kan du navigere gjennom alle React-komponentene i appen din. Når det er installert, åpner du nettleserinspektørverktøyene, og klikker på den nylig tilgjengelige Reagere fane. Legg merke til at i stedet for HTML-elementer ser du hierarkiet av React-komponenter i appen din. Klikk på Når valgt, vises informasjon om en komponent i vinduet til høyre. De React-utviklerverktøyene er svært nyttige for feilsøking, spesielt når du kommer på å utvikle mer komplekse React-apper, så det er vel verdt å bli vant til å bruke dem på enklere apper. Du kan også bruke React-utviklerverktøyene til å inspisere søknadstilstanden din, som vi kommer inn i neste opplæring. I denne opplæringen lærte du hvordan du kan dele appen din i separate komponenter for å gjøre det mer modulært. Komponent rekvisitter gjør det mulig å sende inn verdier til individuelle komponenter, som ligner på hvordan du legger til attributter til HTML-elementer. Vi så også hvordan du kan utnytte nye nettleserinspeksjonsverktøy for å undersøke komponenter og rekvisitter. I del 3 legger vi til status i vår app for å hjelpe oss med å administrere dataene våre mer effektivt.React.createElement ()
Metode oppretter et HTML-element (a Header.js
og åpne opp App.js
.App.js
:Import Header fra './Header';
.js
filtype som dette antas. Også fordi
komponenten er i samme mappe som vår
komponent, trenger vi ikke å angi hele banen.Importer header fra './components/Header';
fra innsiden App.js
, Du får en kompileringsfeil.
komponent i returoppgaven akkurat som ethvert HTML-element. Det er imidlertid en advarsel. Du kan bare returnere ett toppnivå element i en komponent retur metode.gjengivelse () retur ( );
gjengivelse () retur (
komponent inne i klassen App utvider komponent render () return (
Oppdag din film Mojo!
komponent blir gjengitt.
komponent, fjerner vi følgende HTML-blokk fra App.js
og legg den til Header.js
.Oppdag din film Mojo!
App.js
de
komponent gjengemetoden returnerer hva som ser ut som HTML. Likevel i Header.js
det er bare en enkelt samtale til React.createElement ()
. Hva skjer?App.js
Vi bruker JSX til å skrive HTML-lignende syntaks for å definere vår komponentutgang. Sammenlign dette med vår komponentdefinisjon for Header.js
.React.createElement ('div', null, 'Hei, dette er en React-komponent!');
React.createElement ()
ring med JSX-ekvivalenten vi kopierte fra App.js
. Din Header.js
filen skal nå se slik ut:Import React, Component fra 'reagere'; Klassehode utvider komponent render () return (
Oppdag din film Mojo!
klassenavn
heller enn klasse
å indikere hvor vi vil erklære en CSS-klasse? Dette skyldes at alle JSX er kompilert ned til rent JavaScript, og klasse
er et reservert ord i ES6 JavaScript.App.css
og rediger .App-header
CSS klasse å være:.App-header bakgrunnsfarge: steelblue; høyde: 70px; polstring: 20px; farge: hvit;
Komponent rekvisitter
komponenten er statisk. Det vil si, det viser fast innhold som aldri endres. Men komponenter kan gjøres for å være dynamiske og skjerminnholdet passert inn i dem, via komponent rekvisitter. Dette gjør komponentene plutselig mye mer nyttige ettersom de blir generiske og gjenbrukbare.id
, klasse
, stil
og så videre gjør det mulig for oss å tildele unike verdier for det bestemte App.js
, oppdater
tag for å være:
komponent for å bruke tekst
rekvisitt. This.props.text
tekst
prop i App.js
.tekst
prop innsiden Header.js
ved hjelp av: This.props.text
this.props.text
ville bli utgitt, noe som ikke er det vi vil ha.dette
søkeord refererer til Overskrift
komponent klasse, og Rekvisitter
er et objekt som inneholder alle verdiene som er sendt inn fra
. I vårt tilfelle, Rekvisitter
objekt inneholder bare en oppføring, men du kan legge til så mange som du liker i praksis.
komponenten er nå mye mer generisk og inneholder ikke en hardkodd streng. Dette er en god praksis når du skriver React-komponenter. Jo mer generisk du lager dem, jo mer gjenbrukbare er de.
komponent, men rekvisitter kan også passere variabler, funksjonsreferanser og tilstand til komponenter.headerText
er en variabel:Inspisere reaktorkomponenter
komponent for å velge den.
komponenten har ingen rekvisitter og så er vinduet tomt. Men hvis du velger
komponent inne
så ser du "tekst" -posten vi passerte inn.Konklusjon