I den här sista handledningen i vår React-serie skapar vi en ny
komponent för att lägga till nya filmer manuellt via en anpassad blankett. Detta kommer att sluta utveckling för "Movie Mojo" -appen.
Koden för det slutliga projektet är tillgängligt för nedladdning via länken till höger om skärmen (du kan behöva rulla ner). Senare kommer jag att ge steg för steg instruktioner om hur man får projektet igång på ditt system.
De
komponent utmatar ett formulär för att tillåta användare att manuellt ange detaljer om en enskild film och lägga till den i befintliga filmer i galleriet när formuläret har skickats in.
Formuläret kräver tre textinmatningar för titel, år och poster bild; plus ett textområde för filmbeskrivningen. I / src / komponenter /
, skapa en ny fil som heter AddMovie.js
och lägg till följande:
Importreakt, Komponent från "reagera"; klass AddMovie utökar komponent render () return (); exportera standard AddMovie;
Reaktionen ref
Attribut lagrar en referens till varje formmatningsfält som egenskapskomponentklass. Vi kommer snart att använda dessa referenser som ett sätt att enkelt ta in inmatningsfältvärden.
För det första, lägg till följande stilar till App.css
för att göra formen lite mer estetisk:
/ * filmformat stilar * / .movie-form width: 250px; marginal: 0 auto; .movie-form input, .movie-form textarea bredd: 250px; font-size: 14px; vaddering: 5px; marginal: 5px; .movie-form-knappen font-size: 16px; vaddering: 4px; marginal: 10px 10px 30px 10px;
I Sedan, överst i filen, importera Din app "Movie Mojo" ska nu visa en blankett längst ner i webbläsarfönstret. Vi måste ange en återkallningsmetod som körs när formuläret skickas, vilket vi kan använda för att skapa en ny film. Lägg till det här i Lägg sedan till Den första uppgiften är att förhindra att standardinsändningshändelsen avfyras, vilket vi gör med Därefter skapar vi ett nytt filmobjekt genom att ta tag i formfältvärdena som vi tidigare lagrat som komponenter i klassklassen. en När du väl är nöjd För att visa den nya filmen i vårt galleri måste vi lägga till den i För att uppnå detta, skapa en ny metod i Glöm inte att binda den nya metoden till Förresten kanske du undrar varför vi behövde göra det här men inte för Att använda Tillbaka in Nu när vi fyller i formuläret får vi filmen objektet utmatas till konsolen, som tidigare, men den här gången är det via Ta bort Detta är ungefär som det vi gjorde i del tre för Detta kommer att resultera i varje ytterligare film, adderad via formuläret, med unika nycklar. … och så vidare. Öppna "Movie Mojo" -appen i webbläsaren och lägg till två nya filmer i galleriet via formuläret. Det finns extra filmaffisch bilder som läggs till Varje gång du skickar in formuläret läggs en extra film till galleriet! Klicka på länken till höger (ungefär halvvägs ner på sidan) för att ladda ner det färdiga "Movie Mojo" -projektets zip-fil. När det är extraherat öppnar du ett kommandoradsfönster och navigerar till Det tar några minuter att ladda ner alla modulerna Node.js som behövs för att köra projektet. Skriv sedan: Detta kommer att kompilera React-appen och öppna den i en webbläsare via en dedikerad mini-webbserver. Vi har täckt en hel del i den här fyradelade handledningsserien, så grattis om du har gjort det hela vägen och följt med koden. Du bör nu känna dig bekväm med Reacts grunder, och detta kommer förhoppningsvis ge dig självförtroendet att fortsätta och bygga mer komplicerade appar. Jag skulle rekommendera att ladda ner "Movie Mojo" -projektet och undersöka källkoden för att du förstår hur allt passar ihop. Det finns mycket utrymme att förlänga appen, så varför försök inte komma med några nya extrafunktioner? Detta är också ett utmärkt sätt att cementera ditt lärande, genom att försöka implementera nya React-element till appen. Här är några idéer du kan överväga att lägga till: Jag skulle gärna höra någon feedback du kanske har om denna handledning via kommentarerna nedan. Fanns det lätt att följa, eller var det delar du kämpade med? Jag letar alltid efter att göra mina tutorials bättre, så feedback är alltid mycket välkommen. Glad Reaktionskodning!App.js
, Lägg till
komponent inuti stängningen
komponent för att göra den tillgänglig.importera AddMovie från './AddMovie';
element:
onSubmit = (e) => this.addNewMovie (e)
addNewMovie ()
metod till toppen av
komponent klass:addNewMovie (e) e.preventDefault (); var movie = title: this.title.value, year: this.year.value, description: this.description.value, poster: this.poster.value; console.log (film);
e.preventDefault ()
. Annars, när formuläret skickas, uppdateras webbsidan automatiskt, vilket inte är vad vi vill ha.console.log ()
kommando utmatar film
objekt så att vi kan testa det skapas korrekt vid formulärinsändning.film
objektet skapas korrekt, fortsätt och ta bort console.log ()
ring upp.film
statobjekt. När detta är klart kommer React att ta hand om att uppdatera DOM för oss.App.js
(där app-statobjektet lever) för att hantera att lägga till en film i det aktuella tillståndet.addMovieToGallery (film) console.log ('mooooooovie', film);
detta
så det är tillgängligt i hela klassen.this.addMovieToGallery = this.addMovieToGallery.bind (this);
addNewMovie ()
metod som vi lagt till i
komponent ovan. Detta är en bieffekt av att använda en ES6-pilfunktion, eftersom den automatiskt binder detta
till dig. Det här lilla tricket är väl värt att komma ihåg eftersom det minskar kodkomplexiteten, samtidigt som du förbättrar kodens läsbarhet.addMovieToGallery ()
i vår
barnkomponentkod, skickar vi helt enkelt ner en referens till det via rekvisita. I App.js
, uppdatera
ring för att vara:AddMovie.js
, uppdatera addNewMovie ()
Metod för att överföra filmobjektet till addMovieToGallery ()
metod via addMovie
prop vi just skapat.addNewMovie (e) e.preventDefault (); var movie = title: this.title.value, year: this.year.value, description: this.description.value, poster: this.poster.value; this.props.addMovie (film);
addMovieToGallery ()
metod i
komponent.console.log ()
kommando i addMovieToGallery ()
och ersätt det med följande kod för att lägga till de angivna film detaljerna till bio
statligt objekt:addMovieToGallery (film) var ts = Date.now (); var newMovie = ; newMovie ['movie' + ts] = film; var currentMovies = ... this.state.movies; var newMovies = Object.assign (currentMovies, newMovie); this.setState (movies: newMovies);
loadAdditionalMovies ()
metod. Huvudskillnaden är att en unik nyckel måste genereras, på flugan, för varje extra filminspelning. Detta uppnås genom att använda den aktuella tidsstämpeln som den unika nyckeln och lägga till den till film
.movie1501686019706 movie1501686027906 movie1501686032929
./ Public / affischer /
mapp för bekvämlighet, så du kan enkelt testa att lägga till filmer i galleriet. Du kan komma åt dessa genom att ladda ner det färdiga appprojektet.Installera Movie Mojo
movie-mojo
katalog och ange:npm installera
npm start
Slutsats