I denne siste opplæringen i React-serien lager vi en ny
komponent for å legge til nye filmer manuelt via et egendefinert skjema. Dette vil bringe utviklingen for "Movie Mojo" -appen til en slutt.
Koden for det endelige prosjektet er tilgjengelig for nedlasting via linken til høyre på skjermen (du må kanskje bla nedover). Senere gir jeg trinnvise instruksjoner om hvordan du får prosjektet i gang på systemet.
De
komponent utgir et skjema som lar brukerne manuelt skrive inn detaljer om en individuell film og legge den til de eksisterende filmene i galleriet når skjemaet er sendt inn.
Skjemaet krever tre tekstinnganger for tittel, år og plakatbilde; pluss et tekstområde for filmbeskrivelsen. I / src / komponenter /
, opprett en ny fil som heter AddMovie.js
og legg til følgende:
Import React, Component fra 'reagere'; klasse AddMovie utvider komponent render () return (); eksporter standard AddMovie;
Reaksjonen ref
Attributt lagrer en referanse til hvert skjemainngangsfelt som en komponentklasseegenskap. Vi vil snart bruke disse referansene som en måte å enkelt ta tak i inntastingsfeltverdier.
For det første, legg til følgende stiler til App.css
å gjøre skjemaet litt mer estetisk:
/ * filmformatstiler * / .movie-form width: 250px; margin: 0 auto; .movie-form input, .movie-form textarea bredde: 250px; font-size: 14 piksler; polstring: 5px; margin: 5px; .movie-form-knappen font-size: 16px; polstring: 4px; margin: 10px 10px 30px 10px;
I Deretter, øverst i filen, importerer du Din 'Movie Mojo' -app skal nå vise et skjema mot bunnen av nettleservinduet. Vi må spesifisere en tilbakeringingsmetode som utføres når skjemaet sendes, som vi kan bruke til å lage en ny film. Legg dette til i Deretter legger du til Den første oppgaven er å forhindre at standardinnleveringshendelsen avfyres, som vi gjør med Deretter oppretter vi et nytt filmobjekt ved å ta tak i formverdier for innmatingsfelt som vi tidligere lagret som komponentklasseegenskaper. EN Når du er fornøyd For å vise den nye filmen i vårt galleri, må vi legge den til i For å oppnå dette, opprett en ny metode i Ikke glem å binde den nye metoden til Forresten kan du lure på hvorfor vi trengte å gjøre dette her, men ikke for Å bruke Tilbake i Nå, når vi fyller ut skjemaet, får vi filmen objektet utgitt til konsollen, som før, men denne gangen er det via Slett Dette er ganske lik det vi gjorde i del tre for Dette vil resultere i hver ekstra film, lagt til via skjemaet, med unike nøkler. … og så videre. Åpne filmen "Movie Mojo" i nettleseren og legg til to nye filmer i galleriet via skjemaet. Det er lagt ekstra filmplakatbilder til Hver gang du sender inn skjemaet, legges en ekstra film til galleriet! Klikk på linken til høyre (omtrent halvveis nedover siden) for å laste ned den ferdige filmprofilen "Movie Mojo". Når det er hentet, åpner du et kommandolinjevindu og navigerer til Dette tar noen minutter å laste ned alle modulene "Node.js" som trengs for å kjøre prosjektet. Skriv deretter inn: Dette vil kompilere React-appen og åpne den i en nettleser via en dedikert mini-webserver. Vi har dekket ganske mye i denne firedelte opplæringsserien, så gratulerer hvis du har gjort det hele veien gjennom og fulgte med koden. Du bør nå føle deg komfortabel med grunnlaget for React, og dette vil forhåpentligvis gi deg selvtilliten til å fortsette og bygge mer kompliserte apper. Jeg vil anbefale å laste ned 'Movie Mojo' -prosjektet og undersøke kildekoden for å sikre at du forstår hvordan alt passer sammen. Det er mange muligheter for å utvide appen, så hvorfor ikke prøve å komme opp med noen nye ekstrafunksjoner? Dette er også en fin måte å sementere din læring ved, ved å forsøke å implementere nye React-elementer til appen. Her er noen ideer du kan vurdere å legge til: Jeg vil gjerne høre noen tilbakemeldinger du måtte ha om denne opplæringen via kommentarene nedenfor. Fikk du det lett å følge, eller var det deler du kjempet med? Jeg er alltid ute etter å gjøre mine opplæringsprogrammer bedre, så tilbakemeldinger er alltid veldig velkommen. Glad reaksjonskoding!App.js
, Legg til
komponent inne i avslutningen
komponent for å gjøre det tilgjengelig.importer AddMovie fra './AddMovie';
element:
onSubmit = (e) => this.addNewMovie (e)
addNewMovie ()
metode til toppen av
komponent klasse: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 ()
. Ellers, når skjemaet er sendt, oppdateres nettsiden automatisk, noe som ikke er det vi ønsker.console.log ()
kommandoen utdataer film
objekt slik at vi kan teste det blir opprettet riktig når du sender inn skjema.film
objektet blir riktig generert, gå videre og slett console.log ()
anrop.film
statobjekt. Når dette er gjort, vil React ta vare på å oppdatere DOM for oss.App.js
(der app-tilstandsobjektet lever) for å håndtere å legge til en film i den nåværende tilstanden.addMovieToGallery (film) console.log ('mooooooovie', film);
dette
så det er tilgjengelig i hele klassen.this.addMovieToGallery = this.addMovieToGallery.bind (this);
addNewMovie ()
metode vi lagt til i
komponent over. Dette er en bivirkning ved å bruke en ES6-pil-funksjon, da den automatisk binder dette
for deg. Dette lille trikset er vel verdt å huske som det reduserer kodekompleksiteten, samtidig som du forbedrer kodens lesbarhet.addMovieToGallery ()
i vår
barn komponent kode, vi bare sende ned en referanse til det via rekvisitter. I App.js
, oppdater
ring for å være:AddMovie.js
, oppdater addNewMovie ()
Metode for å sende filmobjektet til addMovieToGallery ()
metode via addMovie
prop vi nettopp opprettet.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 ()
metode i
komponent.console.log ()
kommando i addMovieToGallery ()
og erstatt den med den følgende koden for å legge til de oppgitte filmen detaljene til filmer
statlig 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 ()
metode. Hovedforskjellen er at en unik nøkkel må genereres, i fly, for hver ekstra filmoppføring. Dette oppnås ved å bruke dagens tidsstempel som den unike nøkkelen og legge til den film
.movie1501686019706 movie1501686027906 movie1501686032929
./ Offentlig / plakater /
mappe for enkelhets skyld, så du kan enkelt teste å legge til filmer i galleriet. Du kan få tilgang til disse ved å laste ned det ferdige app-prosjektet.Installere Movie Mojo
film-mojo
katalog og skriv inn:npm installasjon
npm start
Konklusjon