I del en av denna handledningsserie använde vi skapa reagera-app
verktyg för att skapa en arbetsprovapp som utgångspunkt för vår "Movie Mojo" -galleriapp.
I del två kommer vi att ta tag i att vi lägger till vår första anpassade komponent för att visa individuella filmkort. Vi ser också hur användandet av rekvisita gör att vi kan anpassa utseendet på komponenter genom att skicka in data istället för att hårdkoda det.
Detta visar flexibiliteten och återanvändningen av komponenter, och hur de kan användas som kraftfulla byggstenar i dina React apps.
OK, låt oss skapa en komponent! Till att börja med kommer vi att hålla sakerna ganska enkla och refactor header HTML i sin egen komponent.
Moderna Reaktions bästa praxis rekommenderar att du separerar ut varje komponent i din app i en separat fil. Vi följer denna princip så, i dina projekt / src / komponenter /
mapp, skapa en ny fil som heter Header.js
och öppna den i en textredigerare.
Överst på komponentfiler börjar vi alltid med att importera nödvändiga bibliotek, andra komponenter (som vi kan boja komponenter) och extra tillgångar vi behöver (t ex stilar). De importera
uttalandet är en del av ES6 och låter oss hålla våra projekt mycket modulära.
För vår
komponent behöver vi bara importera React-biblioteket, vilket vi kan göra med detta uttalande:
Importreakt, Komponent från "reagera";
Detta importerar hela React-biblioteket och gör det tillgängligt via Reagera
variabel. Det importerar också Komponent
objekt direkt så att vi kan använda det utan att behöva specifikt kvalificera det med ett föregående Reagera.
objektreferens.
Med andra ord, om vi inte uttryckligen importerade Komponent
objekt då måste vi få tillgång till det enligt följande:
React.Component
Men för att vi importerade Komponent
direkt kan vi bara använda det själv utan hänvisning till Reagera
variabel. Det spelar ingen roll vilken du använder, och är bara nere till preferens.
För att faktiskt skapa komponenten förlänger vi Komponent
objekt för att skapa en ny klass som definierar vår
komponent. Efter importera
uttalande, typ:
Klasshuvudet utökar komponent export standard App;
Här använder vi en ES6-klass som vår komponentbehållare. Klasser är ett bra sätt att inkapslera all kod som behövs för att beskriva din komponent.
Du kanske också har märkt att komponentfilen slutar med en exportdeklaration. Detta, som du kanske förväntar dig, exporterar vår komponent och gör den tillgänglig för andra filer i vårt projekt.
I allra högsta grad krävs att alla React-komponenter har en återgivningsmetod, vilket ger en viss markering. Det här kan vara HTML, andra React-komponenter eller en blandning av båda.
Lägg till detta i din komponentklass:
render () return React.createElement ('div', null, 'Hej där, det här är en React-komponent!');
De För att använda en React-komponent i en annan komponent måste vi först importera den, så lägg till den i listan över importdeklarationer högst upp på Observera hur du inte behöver lägga till Faktum är att om du försöker använda Vi kan nu lägga till Så det här är inte tillåtet: Om du vill återvända till flera element måste du sätta upp dem alla i ett enskilt omslagsperspektiv: Så se till att du lägger till Välkommen till "Movie Mojo" React app! Detta kommer att leda till vår För att slutföra Men du kanske har märkt att det finns ett problem. I Svaret är JSX. I Så här måste vi skriva React-komponenter utan JSX. Faktum är att det här är vad JSX sammanställs till innan det kan göras till webbläsaren under huven. Du behöver inte använda JSX alls för dina React-komponenter. det är helt upp till dig. Men nästan alla komponenter du kommer att stöta på kommer att skrivas i JSX eftersom det bara är så mycket lättare att skriva. Det är också mycket läsbart för andra som är nya i din kod. Tänk dig att behöva studera ett React-projekt som innehåller dussintals olika komponenter skrivna i vanlig JavaScript! Så det borde inte vara någon överraskning att vi ska använda JSX för komponentdefinitioner under resten av denna handledningsserie. Gå vidare och ersätt Medan JSX tillåter oss mycket mer flexibilitet att skriva våra komponenter, kom ihåg att det inte är egentligen HTML vi skriver men en abstraktion av det. Du kan se detta i kodfältet ovan. Meddelande i Låt oss också justera rubrikstegen. Öppna Detta uppdaterar bakgrundsfärgen på rubriken och minskar höjden. Hittills, vår Tänk på komponent rekvisita som liknar HTML-taggar. Till exempel a Vi kan göra samma för React-komponenter. Säg att vi inte vill att vår rubrik ska mata ut den fasta texten "Discover Your Movie Mojo!" hela tiden. Skulle det inte vara bättre om vår rubrik skulle kunna visa någon text? Till skillnad från HTML-attribut kan vi namnge våra komponenter rekvisita vad vi än vill. Inuti Uppdatera sedan Detta resulterar i vår rubrik som visar vilken text som läggs till i Låt oss ta en närmare titt på hur vi hänvisade till De lockiga hängslen berättar bara för JSX att vi har några JavaScript vi vill utvärdera. Detta skiljer det från text. Om vi inte använde några lockiga hängslen, strängen bokstavlig De Vår Det här är goda nyheter när du utvecklar kommande React apps eftersom du kan återanvända komponenter från tidigare projekt så att du inte behöver skriva allt från början. Vi använde rekvisita ovan för att passera en fast sträng i För att skicka en variabel via rekvisita kan vi göra något så här, var Det finns ett mycket användbart verktyg tillgängligt för Chrome-webbläsaren som låter dig inspektera information om din React-app. Standardverktyg för utvecklare tillåter dig bara att visa normala HTML-element, men med verktyget React Developer Tools installerat kan du navigera genom alla React-komponenter i din app. När det är installerat, öppna verktygen för webbläsarinspektör och klicka på den nyligen tillgängliga Reagera flik. Observera att istället för HTML-element ser du hierarkin för React-komponenter i din app. Klicka på När en gång väljs visas information om en komponent i fönstret till höger. De React-utvecklarverktygen är mycket användbara för debugging, speciellt när du kommer på att utveckla mer komplexa React-appar, så det är väl värt att vänja sig vid att använda dem på enklare appar. Du kan också använda verktygen React developer för att inspektera din ansökan, vilket vi kommer in i nästa handledning. I denna handledning lärde du dig hur du delar upp din app i separata komponenter för att göra det mer modulärt. Komponentrekvisita gör att du kan skicka in värden till enskilda komponenter, som liknar hur du lägger till attribut till HTML-element. Vi såg också hur man kan utnyttja nya verktyg för webbläsarinspektör för att undersöka komponenter och rekvisita data. I del 3 lägger vi till tillstånd i vår app för att hjälpa oss att hantera våra data mer effektivt.React.createElement ()
Metoden skapar ett HTML-element (a Header.js
och öppna upp App.js
.App.js
:importera rubrik från "./Header";
.js
filtillägg, eftersom detta antas. Också för att
komponenten finns i samma mapp som vår
komponent behöver vi inte ange hela sökvägen.importera rubrik från './components/Header';
från insidan App.js
, Du får ett kompileringsfel.
komponent i returdeklarationen precis som något HTML-element. Det finns dock ett tillvägagångssätt. Du kan endast returnera ett toppnivåelement inom en returmetod för komponenter.render () returnera ( );
render () returnera (
komponent inuti klass App utökar komponent render () return (
Upptäck din film Mojo!
komponent gjordes.
komponent tar vi bort följande HTML-block från App.js
och lägg till den till Header.js
.Upptäck din film Mojo!
App.js
de
komponentåtergivningsmetod returnerar det som ser ut som HTML. Ändå i Header.js
det är bara ett samtal till React.createElement ()
. Vad pågår?App.js
vi använder JSX för att skriva HTML-liknande syntax för att definiera vår komponentutgång. Jämför detta med vår komponentdefinition för Header.js
.React.createElement ('div', null, 'Hej där, det här är en React-komponent!');
React.createElement ()
ring med JSX-ekvivalenten vi kopierade från App.js
. Din Header.js
filen ska nu se ut så här:Importreakt, Komponent från "reagera"; klasshuvud utökar komponent render () return (
Upptäck din film Mojo!
klassnamn
hellre än klass
för att ange var vi vill förklara en CSS-klass? Detta beror på att alla JSX är sammanställda till ren JavaScript, och klass
är ett reserverat ord i ES6 JavaScript.App.css
och redigera .App-header
CSS klass att vara:.App-header bakgrundsfärg: steelblue; höjd: 70px; vaddering: 20px; färg vit;
Komponent rekvisita
komponenten är statisk. Det betyder att det visar fast innehåll som aldrig ändras. Men komponenter kan göras för att vara dynamiska och visningsinnehållet passerat in i dem, via komponent rekvisita. Detta gör komponenter plötsligt mycket mer användbara eftersom de blir generiska och återanvändbara.id
, klass
, stil
och så vidare gör det möjligt för oss att tilldela unika värden för det specifika App.js
, uppdatera
tagg för att vara:
komponent att använda text
stötta.This.props.text
text
prop i App.js
.text
prop inuti Header.js
använder sig av:This.props.text
this.props.text
skulle utmatas, vilket inte är vad vi vill ha.detta
sökord hänvisar till Rubrik
komponent klass, och rekvisita
är ett objekt som innehåller alla värden som skickats in från
. I vårt fall är rekvisita
Objektet innehåller bara en post, men du kan lägga till så många som du vill i praktiken.
komponenten är nu mycket mer generisk och innehåller inte en hårdkodad sträng. Det här är en bra metod när du skriver React-komponenter. Ju mer generiska du gör dem desto mer återanvändbara är de.
komponent, men rekvisita kan också passera variabler, funktionsreferenser och tillstånd till komponenter.rubrik
är en variabel:Inspecting React Components
komponent för att välja den.
komponenten har inga rekvisita och så är fönstret tomt. Men om du väljer
komponent inuti
då ser du texten "text" vi passerade in.Slutsats