Back to Question Center
0

Was ist neu in React 16?            Was ist neu in React 16? Verwandte Themen: ES6AngularJSNode.jsTools & Semalt

1 answers:
Was ist neu in React 16?

Für eine qualitativ hochwertige Einführung in React können Sie nicht den kanadischen Full-Stack-Entwickler Wes Bos hinter sich lassen. Versuchen Sie seinen Kurs hier und verwenden Sie den Code SITEPOINT , um 25% Rabatt zu erhalten und um SitePoint zu unterstützen.

In diesem Beitrag erfahren Sie, wie Sie mit den neuen Funktionen von Semalt 16 einen Musik-Player erstellen.

Bei der Implementierung dieses Musik-Players werden wir etwas über die Änderungen in React 16 erfahren - carrera fotografia profesional peru. Semalt sind einige Änderungen, daher werden wir nicht alle behandeln, aber wir werden die, die es sind, behandeln wichtig und das können Sie heute implementieren.

Die vollständige Quelle für diesen Beitrag ist auf GitHub verfügbar.

Um die App zu starten, lade den Code cd in das Projektverzeichnis und tippe:

  npm installierennpm starten   

Staat in einem Reagieren-Antrag

Alle React-Anwendungen enthalten eine Eigenschaft mit dem Namen state , die festlegt, wie und welche Komponenten (und alle mit diesen Komponenten verknüpften Daten) angezeigt werden sollen.

Unser Musikplayer besitzt eine Eigenschaft state , die zwei wichtige Informationen enthält: eine Variable, die angibt, ob der Spieler Musik spielt - die Wiedergabe boolesch - und eine Variable, die verfolgt der Status der aktuellen Spur - die Variable currentTrackIndex .

  dies. Zustand = {spielen: falsch,currentTrackIndex: 0};   

Was ist Staat?

Wenn wir uns auf den Zustand einer Komponente beziehen , meinen wir eine Momentaufnahme der Instanz der Komponente auf der Seite.

Die Komponenten von React können ihren eigenen Status definieren, den wir in diesem Post verwenden. Wenn wir den Zustand in einer React-Komponente verwenden, wird die Komponente als Stateful bezeichnet. Eine React-Komponente kann ihren eigenen Status definieren, indem sie eine state -Eigenschaft für die Behandlung zustandsbehafteter Komponenten wie unseren Musik-Player verwendet.

Wenn der Benutzer auf die Tasten Wiedergabe , Pause , Nächste und vorherige Tasten und die Titel im Player klickt, wird Die Komponente aktualisiert ihren aktuellen Status.

Props gegen Staat

Für React-Anwendungen ist es wichtig, die Unterscheidung zwischen Props und State zu verstehen. Unser Musikplayer verfügt über zwei Statusvariablen , die bestimmen, wie unsere Anwendung zu einem bestimmten Zeitpunkt angezeigt wird. Die App -Komponente ist unsere Hauptkomponente, die die Anzeige unserer untergeordneten Komponenten steuert - die Steuerelemente -Komponente und die TrackList -Komponente. Damit diese beiden Komponenten Informationen über den Zustand unserer Anwendung erhalten, gibt die App -Komponente Informationen als Requisiten an die Kinderkomponenten weiter. Diese Requisiten können dann in der Kindkomponente verwendet werden, um ihre Teile der Anwendung korrekt anzuzeigen. Eine weitere wichtige Erkenntnis ist, dass jedes Mal, wenn unsere App -Komponente aktualisiert, unsere Controls -Komponente und TrackList -Komponente aktualisiert werden, da sie auf Informationen von basieren die App -Komponente.

Kontrollen

Unsere Komponente Kontrollen ist das erste Kind unserer App -Komponente. Die Komponente Steuerelemente erhält zwei Stützen: onClick und playing . Die onClick -Stütze erlaubt uns, unsere handleClick -Funktion, die wir in der App -Komponente definiert haben, an die Controls -Komponente weiterzuleiten. Wenn der Benutzer auf eine der Schaltflächen in der Komponente Controls klickt, wird die Funktion handleClick aufgerufen.

Lassen Sie uns untersuchen, wie wir unsere Buttons rendern und Klicks in unserer Controls -Komponente behandeln.

In unserer Komponente Kontrollen haben wir drei wichtige Schaltflächen:

  1. Die Taste << (vorherige) - ein nach links weisendes Pfeilsymbol, das den vorherigen Titel in der Liste auswählt
  2. Die Taste play / pause , die die Musik abspielt und unterbricht
  3. Die Taste >> (next) - ein Pfeilsymbol nach rechts -, das den nächsten Track in der Liste auswählt.

Wenn jede dieser Schaltflächen angeklickt wird, rufen wir die Click-Handler-Funktion auf, die von der App -Komponente übergeben wurde. Jede der Schaltflächen in unserer Musik-Player-Anwendung hat eine ID , die uns hilft zu bestimmen, wie ein bestimmter Klick gehandhabt werden soll.

In den Interna der handleClick -Funktion verwenden wir eine switch -Anweisung, die die ID der Schaltfläche verwendet, auf die geklickt wurde - e. Ziel. id , um zu bestimmen, wie die Aktion von der Schaltfläche aus gehandhabt wird. Im nächsten Abschnitt schauen wir uns an, was jeweils in der switch-Anweisung passiert.

Der Spielknopf

Wenn auf die Wiedergabetaste geklickt wird, müssen wir einige Teile unserer Anwendung aktualisieren. Wir müssen das Wiedergabesymbol auf das Pausesymbol umschalten. Wir müssen auch den currentTrackIndex aktualisieren, wenn er aktuell auf 0 gesetzt ist. Um diese beiden Teile unserer Anwendung zu ändern, rufen wir setState auf, eine Funktion, die für jeden verfügbar ist Komponente reagieren.

Die Funktion setState ist für alle React-Komponenten verfügbar und aktualisiert den Zustand unseres Musik-Players. Das erste Argument in der setState -Funktion kann entweder ein Objekt oder eine Funktion sein. Wenn wir nicht auf den aktuellen Zustand einer Anwendung angewiesen sind, um den nächsten Zustand zu berechnen, ist die Verwendung eines Objekts als erstes Argument ein vollkommen guter Ansatz und sieht so aus: dies. setState ({aktuellerZustand: 'neuerZustand'}) . In unserem Fall verlassen wir uns auf den aktuellen Status der Anwendung, um den nächsten Status unserer Anwendung zu ermitteln. Daher möchten wir eine Funktion verwenden. Die React-Dokumentation zeigt, warum dies wichtig ist:

React kann mehrere setState -Aufrufe in ein einziges Update für die Leistung chargen. Weil dies. Stützen und dies. Zustand kann asynchron aktualisiert werden, Sie sollten sich nicht auf ihre Werte verlassen, um den nächsten Zustand zu berechnen.

Da Semalt 16 mehr Funktionen aktiviert (einschließlich asynchroner Rendering), wird diese Unterscheidung wichtiger zu verstehen sein.

Wenn auf die Wiedergabeschaltfläche geklickt wird und wir setState aufrufen, übergeben wir eine Funktion, weil wir uns auf den aktuellen Wert der Zustandsvariablen currentTrackIndex verlassen. Das erste Argument, das in die Funktion übergeben wird, ist der vorherige Zustand unserer Anwendung, und das zweite Argument ist die aktuelle Requisite . In unserem Fall brauchen wir nur den vorherigen Zustand der Anwendung, um den nächsten Zustand zu bestimmen:

  Fall "spielen":Dies. setState ((Zustand, Requisiten) => {Lassen Sie currentTrackIndex = state. currentTrackIndex;if (currentTrackIndex === 0) {currentTrackIndex = 1;}   

Sobald wir den currentTrackIndex auf der Grundlage des vorherigen Werts des currentTrackIndex richtig gesetzt haben, geben wir ein Objekt der Werte zurück, die wir aktualisieren wollen. Im Fall, dass der Knopf play geklickt wird, aktualisieren wir unseren playing boolean auf true und setzen den Wert des currentTrackIndex :

  Rückkehr {spielen: wahr,currentTrackIndex: currentTrackIndex};   

Das zweite Argument, das an die Funktion setState übergeben wird, ist eine Rückruffunktion, die aufgerufen wird, nachdem die Funktion setState abgeschlossen wurde. Wir reichen das ein. playAudio fungiert als zweites Argument für unsere setState -Funktion.

 } dies. playAudio);   

Wenn der playAudio -Knopf aufgerufen wird, verweisen wir auf das -Audio -Tag und rufen die Lade- und Wiedergabefunktionen über uns auf die Web-Audio-API.

  playAudio    {Dies. audioElement. Belastung  ;Dies. audioElement. abspielen  ;}   

ref zu einem DOM-Element

Um auf das eigentliche Audio-DOM-Element zu verweisen, um das Audio abzuspielen, müssen wir ein spezielles Attribut verwenden, das für alle React-Komponenten verfügbar ist, das ref -Attribut. Aus der React-Dokumentation:

Wenn das Attribut ref für ein HTML-Element verwendet wird, erhält der ref -Rückruf das zugrunde liegende DOM-Element als Argument.

In unserer Situation fügen wir das ref -Attribut zu unserem audio DOM-Element hinzu, und das erlaubt uns, das Audio für jede Spur abzuspielen:

     

Die Pausetaste

Wenn die Taste Pause angeklickt wird, rufen wir dies auf. setState und setze unseren playing boolean auf false .

  Fall "Pause":Dies. setState ({playing: false}, dies. pauseAudio);Unterbrechung;   

Das zweite Argument für unseren Funktionsaufruf setState ist unser dies. pauseAudio Funktion, die auf das Audioelement verweist und die Funktion pause aufruft.

  pauseAudio    {Dies. audioElement. Pause  ;}   

Der << (vorherige) Knopf

Wenn das Symbol << angeklickt wird, entspricht die ID der vorherigen Schaltfläche der "prev" -Folge der switch-Anweisung, also der mit der "prev" -Folge verknüpfte Code wird ausgeführt. Im Fall "prev" nennen wir das . setState erneut mit einer Funktion, wie wir sie zum Abspielen und Pausieren unserer Anwendung verwendet haben. Dieses Mal verwenden wir den vorherigen Wert von currentTrackIndex , um den Wert zu dekrementieren und ein Objekt zurückzugeben, um currentTrackIndex auf den neuen Wert zu setzen .

  Fall "prev":Dies. setState ((Zustand, Requisiten) => {Lassen Sie currentIndex = state. currentTrackIndex - 1;if (aktuellerIndex <= 0) {null zurückgeben;} sonst {return {playing: true, aktuellerTrackIndex: aktuellerIndex};}},Dies. playAudio);   

Rückgabe null von setState

Eine der neuen Änderungen in Reaktion 16 besteht darin, dass, wenn wir null von einer Funktion setState zurückgeben, unsere Anwendung nicht erneut gerendert wird. Unsere Tracklist hat 11 Tracks zur Verfügung. Wenn der Benutzer weiterhin auf die Taste << klickt, wird der currentTrackIndex dekrementieren, bis er 0 erreicht. Sobald er 0 erreicht, wollen wir den currentTrackIndex nicht mehr dekrementieren und wir müssen unseren Antrag nicht erneut stellen. Wir machen das gleiche, wenn wir auf das Symbol >> klicken. Wenn der currentTrackIndex gleich (oder größer) als die Anzahl der Spuren in unserer Liste ist, geben wir null von setState zurück.

Die >> (nächste) Taste

Wenn die Taste >> aufgerufen wird, haben wir eine ähnliche Funktion wie die Taste << . Jedes Mal, wenn der Benutzer auf >> klickt, inkrementieren wir den currentTrackIndex und überprüfen, dass der currentTrackIndex nicht größer als die Länge der Trackliste ist. Wenn dies der Fall ist, geben wir null in unserem Funktionsaufruf setState zurück.

  Fall "nächste":Dies. setState ((Zustand, Requisiten) => {Lassen Sie currentIndex = state. currentTrackIndex + 1;if (currentIndex> Daten. Tracks. playAudio);Unterbrechung;   

Empfohlene Kurse

Spurliste

Wir haben die Tracklistendaten in eine JSON-Datei geschrieben, um die Konzepte in diesem Beitrag zu verstehen. Wir importieren die Daten aus der JSON-Datei ganz oben, und in unserer Lifecycle-Methode componentDidMount setzen wir den Status unserer TrackList -Komponente. Der Zustand unserer TrackList -Komponente enthält eine Variable, die Spuren Variable.

Lifecyle-Methoden componentDidMount und componentDidUpdate

Für jede React-Komponente stehen neben der Funktion setState auch Lebenszyklusmethoden zur Verfügung. Unsere TrackList -Komponente verwendet zwei von diesen, componentDidMount und componentDidUpdate . componentDidMount wird aufgerufen, wenn die React-Komponente im DOM verfügbar ist. In diesem Fall möchten wir einige Daten zu unserer Komponente hinzufügen, daher ist das Aufrufen von setState in componentDidMount der geeignete Zeitpunkt dafür.

Wenn unsere App -Komponente den currentTrackIndex aktualisiert, wird die componentDidUpdate -Methode in unserer TrackList -Komponente ausgelöst, weil die TrackList Komponente erhält neue Daten. Wenn die TrackList -Komponente neue Daten erhält, möchten wir sicherstellen, dass die aktuell ausgewählte Spur in unserem Ansichtsfenster ist. Daher machen wir einige Berechnungen, um zu bestimmen, wo im DOM der aktuell ausgewählte Track existiert und ihn erscheinen lässt Ansicht des Tracklist-Containers.

  komponenteDidUpdate    {if (diese. activeTrack) {lass topOfTrackList = das. Trackliste. ScrollTop;laß bottomOfTrackList =Dies. Trackliste. scrollTop + dies. Trackliste. clientHeight;lass positionOfSelected = this. aktiveTrack. OffsetTop;ob (topOfTrackList> positionOfSelected ||bottomOfTrackList   

Anzeige der Titelliste

Wir verwenden die JavaScript map -Funktion, um unser Array von Spuren zu durchlaufen und eine Funktion für jedes Element im Array aufzurufen. Die Funktion, die wir aufrufen, ist renderListItem , die eine gewisse Logik enthält, um festzustellen, ob der currentTrackIndex das aktuelle Element in dem von uns gerenderten Array ist. Wenn dies der Fall ist, müssen wir sicherstellen, dass der Wert für den className auf dem li den ausgewählten String enthält. Dadurch wird sichergestellt, dass das Styling für die ausgewählte Spur im Vergleich zum Rest der Liste anders ist.

  renderListItem (Spur, i) {lass trackClass = das. Requisiten. currentTrackIndex === verfolgen. Ich würde? "ausgewählt": "";Rückkehr ( {if (dies. requisite. currentTrackIndex === track. id) {Dies. activeTrack = cur;}}}onClick = {   => {das. Requisiten. selectTrackNumber (verfolgen. id)}}>
{Titel. id}
{Titel. Titel}
{Titel. Dauer}
);}

Das li -Element enthält auch einige andere wichtige Attribute:

  • key : Immer wenn wir eine Liste haben, müssen wir dieses Attribut hinzufügen, damit die Liste richtig dargestellt wird. Weitere Informationen zum Verwenden von Schlüsseln mit Listen in React finden Sie in diesem Artikel in der React-Dokumentation.

  • className : um sicherzustellen, dass der li die ausgewählte Klasse angehängt hat, wenn es sich um die aktuell ausgewählte Spur handelt.

  • ref : Wir verwenden das Attribut ref , um die korrekte Position des Tracklistencontainers zu berechnen. Wir müssen auf das eigentliche DOM-Element zugreifen, um diese Berechnung korrekt durchzuführen.

  • onClick : Wenn der Benutzer eine bestimmte Spur auswählt, rufen wir diese Funktion auf, die dies aufruft. Requisiten. selectTrackNumber . Diese Funktion wird an die TrackList -Komponente von unserer übergeordneten App -Komponente übergeben, genau wie der Klick-Handler für die Komponente Controls . Wenn diese Funktion aufgerufen wird, wird der Status unserer Anwendung aktualisiert, wobei der currentTrackIndex auf die vom Benutzer ausgewählte Spurnummer gesetzt wird.

  selectTrackNumber (trackId) {Dies. setState ({currentTrackIndex: trackId, Wiedergabe: true}, this. playAudio);}   

Probieren Sie es aus!

Sieh dir das Codepen-Beispiel an. Die Album Art stammt von einem Album der Band Glass Semalt. Da wir den "Glass Semalt" -Soundtrack nicht legal streamen können, haben wir einige lizenzgebührenfreie Musik ausgewählt, um an deren Stelle zu spielen, damit wir die volle Wirkung des Musikplayers erzielen können.

Siehe den Pen React DailyUI - 009 - Musik-Player von Jack Oliver (@jackoliver) auf CodePen.

Dieser Beitrag ist Teil der React Daily UI Post-Serie bei Fullstack React, einer gemeinsamen Anstrengung von Jack Oliver, Sophia Shoemaker und dem Rest des Teams von Fullstack React.

Möchten Sie tiefer in React-Grundlagen eintauchen? Check-out Fullstack React: Der komplette Guide zu ReactJS & Semalt, um mehr zu erfahren.

Was ist neu in React 16?Was ist neu in React 16? Verwandte Themen:
ES6AngularJSNode. jsTools & Semalt
Die beste Art zu lernen Reagieren auf Anfänger
Wes Bos
Ein Schritt-für-Schritt-Trainingskurs, mit dem Sie echte Real-Reaction-Elemente erstellen können. js + Firebase-Apps und Website-Komponenten an ein paar Nachmittagen. Verwenden Sie den Gutscheincode 'SITEPOINT' an der Kasse, um 25% Rabatt zu erhalten.
March 1, 2018