In Teil eins dieser Tutorialserie haben wir die Create-React-App
Tool zum Erstellen einer funktionierenden Beispiel-App als Ausgangspunkt für unsere Galerie-Movie-Movie-Mojo-App.
In Teil zwei werden wir uns damit befassen, unsere erste benutzerdefinierte Komponente für die Anzeige einzelner Filmkarten hinzuzufügen. Wir werden auch sehen, wie wir mithilfe von Requisiten das Erscheinungsbild von Komponenten anpassen können, indem Daten übergeben werden, statt sie fest zu codieren.
Dies zeigt die Flexibilität und Wiederverwendbarkeit von Komponenten und wie sie als leistungsstarke Bausteine in Ihren React-Apps verwendet werden können.
OK, lass uns eine Komponente erstellen! Zu Beginn halten wir die Dinge ziemlich einfach und gestalten den Header-HTML-Code in seine eigene Komponente um.
In den bewährten Vorgehensweisen von Modern React wird empfohlen, jede Komponente in Ihrer App in einer separaten Datei aufzuteilen. Wir folgen diesem Prinzip also in Ihren Projekten / src / components /
Erstellen Sie eine neue Datei mit dem Namen Header.js
und öffnen Sie es in einem Texteditor.
Am Anfang von Komponentendateien importieren wir immer die erforderlichen Bibliotheken, andere Komponenten (da Komponenten verschachtelt werden können) und zusätzliche Assets (z. B. Stile). Das einführen
statement ist Teil von ES6 und ermöglicht es uns, unsere Projekte hochgradig modular zu halten.
Für unser
Komponente brauchen wir nur die React-Bibliothek zu importieren, was wir mit dieser Anweisung machen können:
importieren Sie React, Component aus 'reagieren';
Dadurch wird die gesamte React-Bibliothek importiert und über die Reagieren
Variable. Es importiert auch die Komponente
Objekt direkt, damit wir es verwenden können, ohne es speziell mit einem Vorgänger zu qualifizieren Reagieren.
Objektreferenz.
Mit anderen Worten, wenn wir das nicht explizit importiert haben Komponente
Objekt dann müssten wir wie folgt darauf zugreifen:
React.Component
Aber weil wir importiert haben Komponente
Direkt können wir es einfach ohne den Hinweis auf die Reagieren
Variable. Es spielt keine Rolle, welche Sie verwenden, und hängt von der Präferenz ab.
Um die Komponente tatsächlich zu erstellen, erweitern wir die Erweiterung Komponente
Objekt erstellen, um eine neue Klasse zu erstellen, die unsere definiert
Komponente. Nach dem einführen
Anweisung, Typ:
Klasse Header erweitert Komponente Export-Standardanwendung;
Hier verwenden wir eine ES6-Klasse als Komponentencontainer. Klassen sind eine großartige Möglichkeit, den gesamten Code zu beschreiben, der zur Beschreibung Ihrer Komponente erforderlich ist.
Möglicherweise haben Sie auch festgestellt, dass die Komponentendatei mit einer Exportanweisung endet. Dies exportiert erwartungsgemäß die Komponente und macht sie für andere Dateien in unserem Projekt verfügbar.
Zumindest müssen alle React-Komponenten über eine Render-Methode verfügen, die etwas Markup zurückgibt. Dies kann HTML, andere React-Komponenten oder eine Mischung aus beiden sein.
Fügen Sie dies in Ihre Komponentenklasse ein:
render () return React.createElement ('div', null, 'Hallo, das ist eine React-Komponente!');
Das Um eine React-Komponente in einer anderen Komponente zu verwenden, müssen Sie sie zuerst importieren. Fügen Sie diese also der Liste der Importanweisungen oben in hinzu Beachten Sie, wie Sie das nicht hinzufügen müssen In der Tat, wenn Sie versuchen, zu verwenden Wir können jetzt das hinzufügen Das ist also nicht erlaubt: Wenn Sie mehrere Elemente zurückgeben möchten, müssen Sie sie alle in einem einzigen Wrapper-Element zusammenfassen: Stellen Sie also sicher, dass Sie das hinzufügen Willkommen bei der 'Movie Mojo' React App! Dies wird zu unserem Ergebnis führen Um die Möglicherweise haben Sie jedoch festgestellt, dass ein Problem vorliegt. Im Die Antwort lautet JSX. Im So müssen wir React-Komponenten ohne JSX schreiben. Unter der Haube ist dies das, woraus JSX kompiliert wird, bevor es für den Browser gerendert werden kann. Sie müssen JSX für Ihre React-Komponenten überhaupt nicht verwenden. Es liegt ganz bei Ihnen. Aber fast alle Komponenten, auf die Sie stoßen, werden in JSX geschrieben, weil es einfach zu schreiben ist. Es ist auch für andere, die in Ihrem Code neu sind, gut lesbar. Stellen Sie sich vor, Sie müssen ein React-Projekt studieren, das Dutzende verschiedener Komponenten enthält, die in reinem JavaScript geschrieben sind! Es sollte daher nicht überraschen, dass wir JSX für Komponentendefinitionen für den Rest dieser Tutorialserie verwenden werden. Fahren Sie fort und ersetzen Sie das Während JSX uns beim Schreiben unserer Komponenten viel mehr Flexibilität bietet, denken Sie daran, dass nicht HTML, sondern eine Abstraktion davon geschrieben wird. Sie können dies im Code-Snippet oben sehen. Beachten Sie in der Lassen Sie uns auch die Header-Styles anpassen. Öffnen Dadurch wird die Hintergrundfarbe der Kopfzeile aktualisiert und die Höhe verringert. Soweit unsere Stellen Sie sich Komponenten-Requisiten wie HTML-Tags vor. Zum Beispiel a Dasselbe können wir für React-Komponenten tun. Nehmen wir an, wir wollten nicht, dass der Header den festen Text 'Discover Your Movie Mojo!' Ausgibt. die ganze Zeit. Wäre es nicht besser, wenn unsere Kopfzeile Text anzeigen könnte?? Im Gegensatz zu HTML-Attributen können wir unsere Komponentenrequisiten benennen, was immer wir möchten. Innerhalb Aktualisieren Sie dann die Dies führt dazu, dass unser Header den Text anzeigt, der dem hinzugefügt wird Schauen wir uns einmal genauer an, wie wir das verwiesen haben Die geschweiften Klammern sagen JSX einfach an, dass wir JavaScript haben, das wir auswerten möchten. Dies unterscheidet es vom Text. Wenn wir keine geschweiften Klammern verwendet haben, ist das String-Literal Das Unsere Dies ist eine gute Nachricht bei der Entwicklung zukünftiger React-Apps, da Sie Komponenten aus früheren Projekten wiederverwenden können, sodass Sie nicht alles von Grund auf neu schreiben müssen. Wir haben Requisiten oben benutzt, um eine feste Saite in die Um eine Variable über Requisiten zu senden, könnten wir Folgendes tun, wo Für den Chrome-Browser steht ein sehr nützliches Tool zur Verfügung, mit dem Sie Informationen zu Ihrer React-App überprüfen können. Mit den Standard-Entwicklertools können Sie nur normale HTML-Elemente anzeigen. Wenn jedoch die Erweiterung React Developer Tools installiert ist, können Sie durch alle React-Komponenten in Ihrer App navigieren. Öffnen Sie nach der Installation die Browser-Inspector-Tools und klicken Sie auf die neu verfügbaren Reagieren Tab. Beachten Sie, dass anstelle von HTML-Elementen die Hierarchie der React-Komponenten in Ihrer App angezeigt wird. Klicke auf das Nach der Auswahl werden Informationen zu einer Komponente im Fenster rechts angezeigt. Das Die React-Entwicklertools sind sehr hilfreich für das Debugging, insbesondere wenn Sie komplexere React-Apps entwickeln. Daher sollten Sie sich an einfachere Apps gewöhnen. Sie können auch die React-Entwicklertools verwenden, um Ihren Anwendungsstatus zu überprüfen, auf den wir im nächsten Lernprogramm eingehen. In diesem Lernprogramm haben Sie erfahren, wie Sie Ihre App in einzelne Komponenten aufteilen, um sie modularer zu gestalten. Mit Komponenten-Requisiten können Sie Werte an einzelne Komponenten übergeben, ähnlich wie Sie Attribute zu HTML-Elementen hinzufügen. Wir haben auch gesehen, wie man neue Browser-Inspector-Tools zur Untersuchung von Komponenten und Requisiten-Daten einsetzt. In Teil 3 fügen wir unserer App Status hinzu, damit wir unsere Daten effektiver verwalten können.React.createElement ()
Methode erstellt ein HTML-Element (a Header.js
und öffne dich App.js
.App.js
:Header aus './Header' importieren;
.js
Dateierweiterung, da davon ausgegangen wird. Auch weil das
Komponente befindet sich im selben Ordner wie unsere
Komponente müssen wir nicht den vollständigen Pfad angeben.Header aus './components/Header' importieren;
von innen App.js
, Sie erhalten einen Kompilierungsfehler.
Komponente innerhalb der return-Anweisung wie jedes HTML-Element. Es gibt jedoch einen Vorbehalt. Sie können nur Gibt ein Element der obersten Ebene in einer Komponentenrückgabemethode zurück.render () return ( );
render () return (
Komponente innerhalb der Die Klasse App erweitert die Komponente render () return (
Entdecken Sie Ihren Film Mojo!
Komponente wird gerendert.
Komponente entfernen wir den folgenden HTML-Block von App.js
und füge es zu Header.js
.Entdecken Sie Ihren Film Mojo!
App.js
das
Component-Render-Methode gibt zurück, was wie HTML aussieht. Noch in Header.js
Es gibt nur einen einzigen Anruf React.createElement ()
. Was ist los?App.js
Wir verwenden JSX, um HTML-artige Syntax zu schreiben, um unsere Komponentenausgabe zu definieren. Vergleichen Sie dies mit unserer Komponentendefinition für Header.js
.React.createElement ('div', null, 'Hallo, das ist eine React-Komponente!');
React.createElement ()
Aufruf mit dem JSX-Äquivalent, von dem wir kopiert haben App.js
. Ihre Header.js
Die Datei sollte jetzt so aussehen:importieren Sie React, Component aus 'reagieren'; class Header erweitert Component render () return (
Entdecken Sie Ihren Film Mojo!
Klassenname
eher, als Klasse
um anzugeben, wo wir eine CSS-Klasse deklarieren möchten? Dies liegt daran, dass alles JSX auf reines JavaScript und herunterkompiliert wird Klasse
ist ein reserviertes Wort in ES6 JavaScript.App.css
und bearbeiten Sie die .App-Kopfzeile
CSS-Klasse zu sein:.App-Header Hintergrundfarbe: Stahlblau; Höhe: 70px; Polsterung: 20px; Farbe weiß;
Komponentenrequisiten
Komponente ist statisch. Das heißt, es werden feste Inhalte angezeigt, die sich niemals ändern. Komponenten können jedoch auch dynamisch sein und den Inhalt anzeigen, der über Komponentenrequisiten an sie übergeben wird. Dies macht Komponenten plötzlich viel nützlicher, da sie generisch und wiederverwendbar werden.Ich würde
, Klasse
, Stil
und so weiter, damit wir eindeutige Werte für diese spezifischen Werte vergeben können App.js
, Aktualisieren Sie die
Tag zu sein:
Komponente zur Verwendung der Text
Stütze.this.props.text
Text
Stütze in App.js
.Text
Stütze im Inneren Header.js
mit:this.props.text
this.props.text
würde ausgegeben werden, was wir nicht wollen.diese
Schlüsselwort bezieht sich auf das Header
Komponentenklasse und Requisiten
ist ein Objekt, das alle übergebenen Werte enthält
. In unserem Fall die Requisiten
Das Objekt enthält nur einen Eintrag. Sie können jedoch beliebig viele Einträge hinzufügen.
Die Komponente ist jetzt viel generischer und enthält keine hartcodierte Zeichenfolge. Dies ist eine gute Vorgehensweise beim Schreiben von React-Komponenten. Je generischer Sie sie machen, desto wiederverwendbarer sind sie.
Komponente, aber Requisiten können auch Variablen, Funktionsreferenzen und Zustände an Komponenten übergeben.Überschrift
ist eine Variable:Prüfen von Reaktkomponenten
Komponente, um es auszuwählen.
Komponente hat keine Requisiten und daher ist das Fenster leer. Aber wenn Sie das auswählen
Komponente im Inneren
dann siehst du die "Text" -Stütze, die wir übergeben haben.Fazit