React Crash Course voor beginners, deel 4

In deze laatste tutorial in onze React-serie maken we een nieuwe  component voor het handmatig toevoegen van nieuwe films via een aangepast formulier. Hiermee wordt de ontwikkeling van de app 'Movie Mojo' afgesloten.

De code voor het laatste project is beschikbaar om te downloaden via de link aan de rechterkant van het scherm (mogelijk moet u naar beneden scrollen). Later zal ik stap-voor-stap instructies geven over hoe het project op uw systeem kan worden uitgevoerd.

Maak het AddMovie-onderdeel

De  component levert een formulier op waarmee gebruikers handmatig gegevens over een afzonderlijke film kunnen invoeren en deze aan de bestaande films in de galerij kunnen toevoegen zodra het formulier is verzonden.

Het formulier heeft drie tekstinvoer nodig voor titel, jaar en posterafbeelding; plus een tekstgebied voor de filmbeschrijving. In / Src / components /, maak een nieuw bestand met de naam AddMovie.js en voeg het volgende toe:

import Reageren, Component uit 'reageren'; class AddMovie breidt Component render () return (uit ( 

Voeg een film toe

this.title = input type = "text" placeholder = "Titel" /> this.year = input type = "text" placeholder = "Year" /> this.poster = input type = "text" placeholder = "Poster" />
); standaard AddMovie exporteren;

The React ref kenmerk slaat een verwijzing op naar elk formulierinvoerveld als een componentklasse-eigenschap. We zullen deze referenties binnenkort gebruiken als een manier om eenvoudig invoerveldwaarden te grijpen.

Voeg echter eerst de volgende stijlen toe aan App.css om de vorm een ​​beetje meer esthetisch te maken:

/ * filmvormstijlen * / .movie-vorm width: 250px; marge: 0 auto;  .film-vorminvoer, .movie-vorm tekstvlak breedte: 250px; font-size: 14px; opvulling: 5px; marge: 5px;  .movie-vormknop font-size: 16px; opvulling: 4px; marge: 10px 10px 30px 10px; 

In App.js, voeg het toe  component binnen de sluiting

 wrapper element:

Importeer vervolgens de. Bovenaan het bestand  component om het beschikbaar te maken.

importeer AddMovie vanuit './AddMovie';

Uw app 'Movie Mojo' zou nu een formulier moeten laten zien aan de onderkant van het browservenster.

We moeten een callback-methode opgeven die wordt uitgevoerd wanneer het formulier wordt ingediend, waarmee we een nieuwe film kunnen maken. Voeg dit toe aan de

 element:

onSubmit = (e) => this.addNewMovie (e)

Voeg vervolgens de addNewMovie () methode naar de top van de  componentklasse:

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); 

De eerste taak is om te voorkomen dat de standaard indiening plaatsvindt, wat we doen e.preventDefault (). Anders, wanneer het formulier wordt ingediend, wordt de webpagina automatisch vernieuwd, wat niet is wat we willen.

Vervolgens maken we een nieuw filmobject door de formulierinvoerveldwaarden te pakken die we eerder eerder als bestandstype-eigenschappen hebben opgeslagen.

EEN console.log () opdracht geeft de film object zodat we kunnen testen of het correct wordt gemaakt na het indienen van het formulier.

Zodra u tevreden bent met het film object correct wordt gegenereerd, ga je gang en verwijder de console.log () telefoontje.

Om de nieuwe film in onze galerij te kunnen weergeven, moeten we deze toevoegen aan de film state object. Zodra dit is gebeurd, zorgt React ervoor dat de DOM voor ons wordt bijgewerkt.

Om dit te bereiken, maakt u een nieuwe methode in App.js (waarbij het app-statusobject leeft) om het toevoegen van een film aan de huidige status af te handelen.

addMovieToGallery (film) console.log ('mooooooovie', film); 

Vergeet niet om de nieuwe methode te binden aan de deze dus het is beschikbaar in de hele klas.

this.addMovieToGallery = this.addMovieToGallery.bind (this);

Overigens vraag je je misschien af ​​waarom we dit hier moesten doen, maar niet voor de addNewMovie () methode die we hebben toegevoegd aan de  component hierboven. Dit is een neveneffect van het gebruik van een ES6-pijlfunctie, omdat deze automatisch bindt deze voor jou. Deze kleine truc is de moeite van het herinneren waard, omdat het de complexiteit van de code vermindert en de leesbaarheid van uw code verbetert.

Gebruiken addMovieToGallery () in onze  kindcomponentcode, geven we eenvoudigweg een verwijzing ernaar door via rekwisieten. In App.js, werk het  oproep om te zijn:

Terug in AddMovie.js, werk het addNewMovie () methode om het filmobject door te geven aan de addMovieToGallery () methode via de AddMovie prop die we zojuist hebben gemaakt.

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); 

Wanneer we nu het formulier invullen, krijgen we het filmobject als eerder uitgevoerd naar de console, maar deze keer via de addMovieToGallery () methode in de  bestanddeel.

Verwijder de console.log () commando binnen addMovieToGallery () en vervang deze door de volgende code om de ingevoerde filmdetails toe te voegen aan de films staat object:

addMovieToGallery (film) var ts = Date.now (); var newMovie = ; newMovie ['film' + ts] = film; var currentMovies = ... this.state.movies; var newMovies = Object.assign (currentMovies, newMovie); this.setState (movies: newMovies); 

Dit is vrij gelijkaardig aan wat we in deel drie deden voor de loadAdditionalMovies () methode. Het belangrijkste verschil is dat voor elke extra filminvoer een unieke sleutel moet worden gegenereerd. Dit wordt bereikt door de huidige tijdstempel als unieke sleutel te gebruiken en toe te voegen film.

Dit zal resulteren in elke extra film, toegevoegd via het formulier, met unieke sleutels.

film1501686019706 movie1501686027906 movie1501686032929

… enzovoorts.

Open de app 'Movie Mojo' in de browser en voeg twee nieuwe films toe aan de galerij via het formulier. Er zijn extra filmposterafbeeldingen toegevoegd aan de ./ Public / posters / map voor het gemak, zodat u gemakkelijk het toevoegen van films aan de galerij kunt testen. U kunt deze openen door het voltooide app-project te downloaden.

Telkens wanneer u het formulier verzendt, wordt een extra film toegevoegd aan de galerij!

Installeren van Movie Mojo

Klik op de link aan de rechterkant (ongeveer halverwege de pagina) om het voltooide 'Movie Mojo' project zipbestand te downloaden. Als het eenmaal is uitgepakt, opent u een opdrachtregelvenster en navigeert u naar de movie-mojo map en voer het volgende in:

npm installeren

Het duurt enkele minuten om alle 'Node.js'-modules te downloaden die nodig zijn om het project uit te voeren.

Typ vervolgens:

npm start

Dit compileert de React-app en opent deze in een browser via een speciale miniserver.

Conclusie

We hebben heel wat besproken in deze vierdelige tutorialserie, dus gefeliciteerd als je het helemaal hebt doorlopen en de code hebt gevolgd.

Je zou je nu op je gemak moeten voelen met de basis van React, en dit zal je hopelijk het vertrouwen geven om door te gaan en meer gecompliceerde apps te bouwen.

Ik raad je aan het project 'Movie Mojo' te downloaden en de broncode te bekijken om er zeker van te zijn dat je begrijpt hoe alles in elkaar steekt.

Er is veel ruimte om de app uit te breiden, dus waarom zou je niet proberen een aantal nieuwe extra functies te bedenken? Dit is ook een prima manier om je leerproces te versterken door te proberen nieuwe React-elementen voor de app te implementeren.

Hier zijn enkele ideeën die u zou kunnen toevoegen:

  • UI en code toevoegen om films uit de galerij te verwijderen.
  • Sorteren op filmtitel, jaar, enzovoort toestaan.
  • Introduceer een beoordelingssysteem.

Ik hoor graag alle feedback over deze tutorial via de onderstaande opmerkingen. Vond je het gemakkelijk om te volgen, of waren er onderdelen waar je mee worstelde? Ik ben altijd op zoek om mijn tutorials beter te maken, dus feedback is altijd van harte welkom.

Happy React-codering!