Lerne zu reagieren indem du ein Spiel machst (Ausgabe 2024) | Daniel Nastase | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Lerne zu reagieren indem du ein Spiel machst (Ausgabe 2024)

teacher avatar Daniel Nastase, Software Developer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Trailer zum Kurs

      1:42

    • 2.

      Bevor wir anfangen

      2:38

    • 3.

      Rendere die App mit ReactDom createRoot

      3:26

    • 4.

      Gerüste bauen die Hauptkomponenten

      3:45

    • 5.

      Requisiten hinzufügen

      2:49

    • 6.

      Zufällige Zeichen

      2:40

    • 7.

      CSS-Stile in React

      3:22

    • 8.

      Inline-Stile festlegen

      4:17

    • 9.

      Der useState()-Hook

      4:20

    • 10.

      Ereignisse in den Kinderkomponenten auslösen wip

      4:17

    • 11.

      Animationen und setInterval

      4:56

    • 12.

      useRef() und bereinigen useEffect() hinzufügen

      9:44

    • 13.

      Kontextanbieter in React

      5:57

    • 14.

      Der useContext()-Hook

      5:33

    • 15.

      Entscheide den Spielsieger

      2:58

    • 16.

      Kursprojekt

      5:27

    • 17.

      Schlussbemerkung

      2:06

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

41

Teilnehmer:innen

--

Projekte

Über diesen Kurs

Möchtest du ReactJs auf lustige, spielerische Weise lernen? In diesem Kurs werden wir React studieren und ein vollständiges Rock-Paper-Scissors-Spiel erstellen.

Ich habe gelernt, wie man programmiert, indem ich versuche, meine eigenen Videospiele zu machen. Es hat mir Spaß gemacht und mir hat es gefallen. Ich denke, Lernen sollte Spaß machen und dem Gefühl nahe kommen, das wir einst hatten, als wir Kinder waren und neue Dinge entdeckten.

Dieser Kurs kommt mit einem druckbaren Handbuch

Der Kurs kommt mit einem schönen druckbaren Handbuch, das du herunterladen und später als einfaches Nachschlagen verwenden kannst. Im Anschluss an den Inhalt der Videos gibt es über 35 Seiten mit Codebeispielen, Ressourcen oder Diagrammen, damit du eine bessere visuelle Darstellung davon bekommst, was vor sich geht.

Während der Erstellung dieses Spiels werden wir die Funktionen von React, Best Practices und wie wir häufige Fallstricke vermeiden können, durchgehen.

Einfache Einrichtung – lerne React ohne all die Ablenkungen

Viele React-Neulinge hängen oft an externen Abhängigkeiten und komplexen Entwicklungsumgebungen auf. Dinge wie Build-Dateien, NPM-Module zum Installieren, Webpack, Redux und mehr. Diese Tools eignen sich hervorragend für komplexe Apps, verleihen aber beim Start in der Regel zusätzliches Gewicht. 

Aus diesem Grund verwenden wir ein Zero-Configuration-Setup. Nur der Code-Editor, eine grundlegende HTML-Datei und der Webbrowser. In diesem Kurs geht es nur um React und React!

Was lernst du in diesem Kurs?

Beim Erstellen einer voll funktionsfähigen App tauchen wir in einige grundlegende Konzepte in React ein, wie:

  • Arbeiten mit JSX, React DOM und Babel
  • Funktionskomponenten verwenden 
  • CSS-Stile und Inline-Stile
  • die Grundlagen der React-Hooks (useState, useEffect, useRef)
  • Einrichten der React Context API für den Datenaustausch
  • Best Practices 

... und mehr 

Wir sehen uns im Kurs!

Triff deine:n Kursleiter:in

Teacher Profile Image

Daniel Nastase

Software Developer

Kursleiter:in

Hey there, thanks for dropping by! I’m Daniel, a software engineer with a great passion for Javascript and CSS.


I am a huge fan of the idea that education is the key to building a better, stable, and richer world.

 

Vollständiges Profil ansehen

Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Trailer zum Kurs: Hallo Leute, und willkommen bei Discourse. Das Ziel dieses Reactjs-Kurses ist es, Ihnen die Tools und Konzepte vorzustellen, die Sie benötigen, um mit der Erstellung echter Webanwendungen zu beginnen Ich bin Daniel und werde dein Lehrer sein. Ich mache jetzt seit mehr als 18 Jahren Webentwicklung , sowohl in großen als auch in kleinen Organisationen, und ich liebe es immer noch. Sie können mehr über mich auf meiner Website GScrafto lesen. Ich habe angefangen, Programmieren zu lernen, indem ich versucht habe, meine eigenen Videospiele zu diesem Grund denke ich, dass Lernen Spaß machen und dem Gefühl nahe kommen sollte , das Sie als Kind hatten , als Sie gespielt und neue Dinge entdeckt haben. Am Ende dieses Kurses werden wir das folgende Spiel mit VGS erstellen Es wird für jeden Spieler ein Stein-Paper-Scheren-Spiel Das Spiel wählt ein zufälliges Zeichen aus und bestimmt auch den Gewinner Während der Entwicklung dieses Spiels werden wir verschiedene Bilder von bewährten Methoden für React durchgehen und auch zeigen, wie man häufig auftretende Fallstricke vermeidet Der Kurs enthält auch dieses nette druckbare Handbuch , das Sie später als Referenz verwenden können Dem Inhalt der Videos hier folgend, gibt es über 35 ganze Seiten mit Code, Beispielen, Ressourcen oder Diagrammen, sodass Sie sich eine bessere visuelle Darstellung dessen verschaffen können , was vor sich geht. Ich habe ziemlich viel Arbeit in dieses Video gesteckt, ich hoffe, es wird helfen. Lass uns anfangen, den Unterricht zu besuchen. 2. Kurs-Einführung: Bevor wir mit dem eigentlichen Programmieren beginnen, möchten wir einige Dinge darlegen Zuallererst, wie man diesen Kurs benutzt. Die Informationen im Diskurs sind ziemlich umfangreich , um die besten Ergebnisse zu erzielen. Mein Rat wäre, diesen Kurs zweimal zu absolvieren. Verschaffen Sie sich beim ersten Mal einen allgemeinen Überblick über den Kurs und beim zweiten Mal machen Sie die eigentliche Übung. Jedes Kapitel enthält eine Start- und Enddatei, die es einfacher macht, dem Inhalt zu folgen. Ich empfehle Ihnen, manuellen Code zu da Sie sich so die Dinge leichter merken können. In diesem Kurs werde ich VS Code und Google Chrome verwenden, da dies meine wichtigsten Tools sind. Sie können jedoch jede andere ID oder jeden anderen Browser verwenden , mit dem Sie vertraut sind. Außerdem haben wir ein sehr minimales Setup. Es sind keine Setarbeiten erforderlich, keine NPM-Module. Sie können sich einfach den Quellcode ansehen und Sie erhalten den Code , der im Browser ausgeführt wird, das erforderliche Wissen Aus realer Sicht ist dies ein anfängerfreundlicher Kurs. Aber wenn Sie nichts über React wissen, könnte es sinnvoll sein meinen anderen Anfängerkurs über React zu belegen, den ich hier habe. Es wird von Ihnen erwartet, dass Sie nur ein wenig über Themen wissen, wie die Komponente ist oder wie eine React-Zustandsvariable funktioniert. Betrachten Sie es als einen Kurs , der Ihnen ein Denkmodell darüber vermittelt , wie Sie echte Apps erstellen können. Wir werden uns mit bewährten Methoden vertraut machen, wir werden Fehler machen und wir werden auch sehen, wie wir sie beheben können. Co-Schnipsel Ich persönlich mag keine langen Kurse. Ich glaube, ich habe noch nie einen Kurs abgeschlossen , der länger als 2 Stunden gedauert hat. Um die Zeit für diesen Kurs zu verkürzen, habe ich viele Codefragmente wie diesen definiert Sie können sie alle hier im VS-Code-Ordner sehen, in dem ich alle Codefragmente habe , die ich während des Kurses verwende Der Grund für die Definition all dieser Codefragmente ist, dass es für mich ziemlich schwierig ist, in einer Fremdsprache zu sprechen und gleichzeitig Code zu schreiben Aber ich möchte dir auch die Zeit ersparen, in der du mir nur zuschaust, wie ich Sachen in den Code-Editor tippe Nachdem wir das geklärt haben, gehen wir zu unserer ersten Lektion über, in der wir React, Render und React to Root verwenden werden , um das Gerüst für unsere Anwendung zu erstellen 3. Rendere die App mit ReactDom createRoot: Schauen wir uns an, was wir in der Startvorlage des Diskurses haben Startvorlage des Es gibt diese einfachen Importe. Hier importieren wir nur Reactome und Babel, wie wir es in der Vergangenheit für Januar getan haben Hier haben wir auch einen Skriptblock, der aus dem Text Babble besteht, nicht Javascript ist Und der Grund dafür ist, dass wir Babble und auch diesen Import benötigen , um X in unseren A-Code schreiben zu können Ich habe dieses Setup in der Idee gemacht , die Dinge nicht zu verkomplizieren, nicht mit MPM-Modulen, Webservern, Tools oder ähnlichem anzufangen Webservern, Tools oder ähnlichem Im Moment haben wir nur diese einfache einfache Index-HTML-Datei Lassen Sie uns nun unsere erste Reaktionskomponente schreiben. Diese Reaktionskomponente wird App heißen. Im Allgemeinen ist die App der Einstiegspunkt für jede React-Anwendung. Ich werde hier Constant App schreiben. Diese App ist eine einfache Funktion, die von der React-App so etwas wie Hallo zurückgibt. Was du hier siehst, ist übrigens x. Das wird von Babble interpretiert und in einfaches Javascript übersetzt Wenn ich zu diesem Zeitpunkt die Seite speichere und aktualisiere, wird nichts passieren Übrigens haben wir dieses Div mit der Idee von Root erstellt Dieses wird als Hauptcontainer für unseren React-Ap dienen . Angesichts der Tatsache, dass wir den React-Ap in diesen Tauchgang einfügen wollen , muss ich als Erstes hierher kommen und eine neue Variable namens container schreiben. Dieser Container entspricht dem Element „Document Get“ nach der ID root. Ich werde dieses De ins Visier nehmen. Als Nächstes muss ich ein neues Root erstellen. Dafür schreibe ich const root. Dieser ist identisch mit React Create Root. Ich gebe es als Parameter an, den Container, den ich gerade in der vorherigen Zeile erstellt habe . Schließlich werde ich eine neue Zeile hinzufügen, in der ich Route Render App Render Render innerhalb dieser Route, dieser App von hier aus, sagen werde Route Render App Render Render innerhalb dieser Route, dieser App von hier aus, sagen . Wenn ich die Seite speichere und aktualisiere, werden wir sehen, dass wir jetzt dieses nette Hallo von der Reactapp haben dieses nette Hallo von der Reactapp Der Inhalt, der zuvor in der ID-Route war, wurde jetzt durch den Inhalt unseres React ersetzt, wo wir gerade von diesem Root-Renderer sprechen Dies wurde zuvor in neueren Versionen von React eingeführt. Es war eine andere Syntax, aber diese bringt einige Leistungsverbesserungen mit sich. Ich werde im Handbuch dieses Kurses den Link zu einem Artikel hinzufügen , der auf einige der Updates verweist, die Root-Render eingeführt wurden. Cool Wir haben unsere erste Komponente gemacht. Als Nächstes werden wir sehen, wie man die Komponenten erstellt , die benötigt werden , um das eigentliche Spiel zu erstellen. 4. Gerüste bauen die Hauptkomponenten: Nachdem wir nun unsere Act-Hauptanwendung erstellt haben, wir einen weiteren Blick auf unsere So wird das Spiel am Ende aussehen. Wie wir hier sehen können, haben wir drei Arten von Komponenten. Zuallererst gibt es die Player-Komponente. Diese Komponente hat zwei Instanzen, eine für den roten Spieler und die andere für den blauen Spieler. Es gibt auch diese Ergebnistafel , auf der angezeigt wird, wer das Spiel gewonnen hat. Schließlich gibt es noch die Spielkomponente , die all dies beinhalten wird. Lass uns jetzt das Gerüst für all diese das Gerüst für all Ich werde zum Index-HTML zurückkehren. Als Erstes komme ich her und erstelle eine Spielkomponente. Dafür schreibe ich Constant Game. Das ist eine Funktion, eine grundlegende Funktion. Wie die App-Komponente wird sie den folgenden Inhalt haben. Ich werde hier einen Dip schreiben , der vorerst nur diesen einfachen Text zurückgibt. Anstatt dieses H in der App zurückzugeben, gebe ich jetzt eine neue Instanz der Spielkomponente zurück. Wenn wir aktualisieren, werden wir jetzt sehen, dass wir hier den Inhalt haben hier den Inhalt , den wir in der Spielkomponente deklariert haben. Aber das ist nicht genug. Wenn ich hierher zurückkomme, werden wir sehen, dass es in der Spielkomponente Spieler gibt und auch dieses Resu-Board Lass uns auch diese beiden erstellen. Als Nächstes erstelle ich die Player-Komponente. Dieser wird Player heißen. Es wird eine Funktion sein , die so etwas zurückgibt, nur mit einem einfachen Text. Schließlich gibt es noch die Ergebnis-Board-Komponente , die ebenfalls eine Funktion sein wird. Innerhalb dieser Funktion werde ich sagen, dass noch keine Ergebnisse vorliegen. Denn hier in der Ergebnisliste müssen wir zeigen, wer das Spiel gewonnen hat. Gehen wir hier in die Spielkomponente und erstellen diesen ganzen Komponentenbogen. Zuallererst benötige ich zwei Instanzen des Typs Player. Ich werde hier eine Instanz und die zweite für den anderen Spieler erstellen . Als Nächstes werde ich auch dieses Ergebnisboard hinzufügen , das wir erstellt haben. Wenn wir hier einen letzten Blick darauf werfen, werden wir feststellen, dass wir auch diese Schaltfläche zum Starten des Spiels benötigen. Ich komme wieder her. Hier werde ich einfach einen einfachen HTML-Button schreiben. Dieser ist keine Komponente, es ist nur ein einfaches HTML-Element. Ich werde speichern. Und wenn wir jetzt aktualisieren, sehen wir, dass wir zwei Player-Komponenten haben, die Schaltfläche und schließlich das Ergebniswort. Aber im Moment sind unsere Player-Komponenten genau dieselben, sie enthalten nur diesen Standardtext. In der nächsten Lektion werden wir sehen, wie wir diese Komponenten mithilfe von Requisiten anpassen können diese Komponenten mithilfe von Requisiten anpassen Und auch, wie wir unseren Komponenten beibringen, ein zufälliges Element zwischen Stein, Papier oder Schere auszuwählen ein zufälliges Element zwischen Stein, Papier oder Schere 5. Requisiten hinzufügen: wir nun das Gerüst der Komponenten fertig haben, schauen wir uns unser letztes Beispiel an Auch hier werdet ihr sehen, dass eine Player-Komponente rot und die andere blau ist Und ihnen sind auch einige Ramble-Symbole zugewiesen. In unserem aktuellen Status sehen beide Komponenten genau gleich aus Sie sind nur ein Div mit einem Standardtext. Was ich in den nächsten beiden Lektionen mit Ihnen machen möchte , ist zunächst, diesen Komponenten Parameter zuzuweisen diesen Komponenten Parameter zuzuweisen damit sie wissen, dass diese rot und die andere blau ist. Außerdem werden wir in der nächsten Lektion sehen, wie man zunächst einige zufällige Elemente für diese Komponenten zeichnet . Beginnen wir mit den Komponentenparametern. Als erstes müssen wir in der Komponentendeklaration hierher kommen und ihnen eine Farbe zuweisen. Hier werde ich sagen, dass ich eine blaue Farbe für diesen Spieler haben möchte. Als Nächstes werde ich sagen, dass ich eine rote Farbe haben möchte. So senden wir einen Parameter in diesem Wert an die eigentliche Komponente. Um sie lesen zu können, muss ich hier einen neuen Props-Parameter hinzufügen Dies ist ein Standardparameter, jede Funktionskomponente hier erhalten kann Was wir tun können, ist einfach den Wert des Parameters zu lesen , den wir senden. Wir können hier also Requisiten dieser Farbe sehen, sagen wir, wenn wir aktualisieren, werden wir hier sehen, dass wir die Farbkomponente Blau haben und die andere ist Rot Aber wir können einen Schritt vorwärts gehen. Wir können die Anweisungen zur Strukturierung von Javascript nutzen . Was ich hier tun kann, ist die Umstrukturierungserklärung für den Colo hinzuzufügen Umstrukturierungserklärung für den Colo Anstatt hier coole Requisiten zu haben, kann ich einfach sagen, dass ich jetzt die Farbe haben will und alles wird genauso funktionieren wie zuvor Aber wir können sogar einen Schritt weitergehen und die gesamte Destrukturierung direkt in der Deklaration der Funktion vornehmen Was ich hier sagen möchte , ist, dass wir ein Objekt als Parameter erhalten und direkt von hier aus eine direkte Strukturierung vornehmen ein Objekt als Parameter erhalten und direkt von hier aus eine direkte Strukturierung Wenn wir speichern und aktualisieren, werden Sie feststellen, dass alles wie zuvor ist. Aber jetzt ist der Code etwas sauberer. Lass uns in der nächsten Lektion sehen, wie wir einige zufällige Elemente für diese Spielerkarte ziehen können . 6. Zufällige Zeichen: Wir haben jetzt die Farbparameter an die Komponenten gesendet. Das ist ziemlich cool, weil wir diese Farben verwenden können, um eine Spielerkomponente rot und die andere blau zu machen. Aber was wir noch nicht behandelt haben , sind diese zufälligen Elemente. Am Ende der Lektion möchte ich in der Lage sein, einige zufällige Elemente zu extrahieren. Im Moment gibt es nur Zeichenketten und sie werden in den Komponenten angezeigt, wie wir es hier haben. Kehren wir hier zu unserem Beispiel zurück. Ich werde zuerst nur den Kommentar hinzufügen , um zu erfahren, was wir hier tun. Und ich werde eine neue Konstante definieren, Hauptzeichen. Diese Konstante wird nur ein einfaches Array sein , das einige Zeichenketten enthält. Jede Zeichenfolge stellt einen möglichen Wert für die Zeichen Stein, Papier oder Schere in diesem Array dar einen möglichen Wert für die Zeichen Stein, . Jetzt kann ich zurück zur Player-Komponente gehen und einen weiteren Kommentar hinzufügen, der besagt, dass wir einen zufälligen Index generieren , um ein zufälliges Zeichen auszuwählen. Das wird eine neue Konstante mit dem Namen Random Index sein. Dieser Zufallsindex wird eine mathematische Funktion sein. Er gibt Zufallswerte 0-2 zurück . Nachdem dieser Zufallsindex erstellt wurde, können wir nun eine weitere Konstante mit dem Namen Random L random sign erstellen dem Namen Random L random sign Nennen wir es. Dieses zufällige Zeichen wird ein Zeichen für einen zufälligen Index sein. Nun, da ich dieses zufällige Zeichen habe, kann ich herkommen und den ganzen Namen, den gesamten Inhalt der Spielerkarte durch dieses Feld ersetzen . Das heißt, was aus den Farbauswahlen kommt und das haben wir hier generiert. Eigentlich benenne ich das in Random Sign um. Okay, wenn wir jetzt aktualisieren, werden Sie sehen, dass der blaue Spieler Papier wählt, während der rote Spieler Stein wählt. Danach aktualisiere ich erneut, aktualisiere erneut und so weiter. Du wirst sehen, dass bei jeder Aktualisierung ein neues zufälliges Zeichen für einen bestimmten Spieler ausgewählt wird. 7. CSS-Stile in React: So wie es jetzt ist, sieht unsere Anwendung ziemlich langweilig aus. Lass uns kommen und einige CSS-Stile hinzufügen. Dafür muss ich eine neue Datei erstellen. Diese Datei wird Styles that CSS heißen. Hier füge ich die benötigten CSS-Stile ein. Nun, das ist kein Kurs über CSS. Sie können sich diese Deklarationen ansehen und Sie werden feststellen, dass viele von ihnen ziemlich selbsterklärend sind, wie das Einstellen eines Hintergrunds Carlo, Ausrichten des Textes und so weiter Nachdem wir diese CSS-Datei erstellt haben, wollen wir sie mit unserer Hauptreaktionsdatei hier verknüpfen Die Tatsache, dass ich ein neues Stylesheet importieren möchte, und zwar dieses, kommt von Styles, die CSS. Wenn wir jetzt aktualisieren, werden wir feststellen, dass wir bereits einige grundlegende Stile in unserer Anwendung haben . Wir haben den Hintergrund, die Farbe des Textes ist unterschiedlich, die Ausrichtung und so weiter. Aber wir haben hier noch keine Stile angewendet, zum Beispiel auf die Player-Komponenten. Dazu muss ich kommen und zum Beispiel die Player-Klasse und die Container-Klasse mit diesen Dips verknüpfen, die Player-Klasse und die Container-Klasse mit für die wir in unserer React-Anwendung haben für die wir in unserer React-Anwendung Ich muss hier einen Klassennamen hinzufügen. Ich werde sagen, dass ich einen Klassennamen für Spieler haben möchte. Und hier im anderen, wenn wir den Hauptcontainer für den Spieler X haben, werde ich den Klassennamen Container hinzufügen. Unter normalen Bedingungen ist das einfach Klasse gleich Container oder Klasse gleich Spieler Aber angesichts der Tatsache, dass die Klasse bereits belegt ist und die Reserve in Javascript funktioniert, müssen wir diesen Klassennamen hinzufügen Lass uns zurückkommen und frisch geben. Wir werden jetzt sehen, dass wir diese beiden Elemente auf dem Bildschirm haben diese beiden Elemente auf dem und sie ganz nett aussehen. Ich werde zu 100% des Browsers zurückkehren, aber eines fehlt noch. Schauen wir uns das letzte Beispiel noch einmal an. Ich werde unser endgültiges Design öffnen. Sie werden hier sehen, dass das Schild umgedreht ist. Dieser zeigt nach rechts und dieser nach links Was wir hier tun können, ist in das CSS zu kommen und eine weitere Regel hinzuzufügen. Ich werde sagen, dass ich möchte das zweite Kind des Spielertyps verwandelt wird. Was ich hier übrigens gemacht habe, ist eine native CSS-Verschachtelung. Ich werde dem Handbuch für diesen Kurs einen Link hinzufügen , über den Sie mehr darüber lesen können Aber das Schöne daran ist, dass Sie, nachdem ich diese Regel hinzugefügt habe, jetzt sehen werden, dass dieser Text im Grunde umgedreht ist Lass mich eine weitere Datei öffnen. Diese Regel, die wir hier hinzugefügt haben, diese Transformation von Scalix minus eins geht und dreht die zweite Wenn ich dort ein echtes Zeichen hinzufüge, zeigt es auf die andere Seite 8. Inline-Stile festlegen: Wir haben einige grundlegende Stile eingerichtet, aber es ist noch viel zu tun. Zum Beispiel haben wir keine Hintergrundfarbe für diese Artikel und wir haben auch kein Bild für die Schilder wie Stein, Papier oder Schere. Das wollen wir in dieser Lektion tun. Fangen wir mit der Hintergrundfarbe an. Wenn wir uns ansehen, wie die Dinge im Moment aussehen, haben wir diesen Farbparameter , der in der Komponente enthalten ist. Dieser Farbparameter kann als Hintergrundfarbe verwendet werden, da wir hier Rot oder Blau haben werden. Genau das wollen wir hier als Hintergrund verwenden. Dafür werde ich den Inline-Stil verwenden, um diesen Inline-Stil zu definieren. Genau hier entspricht der Stil diesem, der als Parameter ein vollständiges Java-Script-Objekt erhält Parameter ein vollständiges Java-Script-Objekt Ich möchte sagen, dass das Hintergrund-Colog genau dem Wert des Parameters entsprechen muss genau dem Wert des , den wir hier erhalten Es wird die Hintergrundfarbe sein und sie wird der Farbe Coloque entsprechen Lassen Sie uns jetzt aktualisieren. Wir sehen, dass wir die Spielerkarten mit der gewünschten Hintergrundfarbe haben. Dieses Inline-Objekt wird mit der Zeit komplexer werden. Eine gute Idee ist es, hierher zu kommen und es hier als separates Objekt zu extrahieren, unser richtiger Inline-Stil, dieser Inline-Stil wird genau das sein, was wir hier haben. Ich werde dieses Objekt direkt an den Inline-Stil weitergeben . Dinge werden genauso aussehen, wie sie vorher aussahen, aber wir haben dieses nette isolierte Objekt , dem wir später weitere Werte hinzufügen können. Lassen Sie uns nun ein wenig über die Bilder sprechen, die in die Spielerkarten eingefügt werden. Anstatt Steine oder Scheren hier zu haben. Dafür werden wir aktuelle Bilder haben. Ich habe bereits einige Ressourcen vorbereitet und werde sie mit Ihnen teilen. Jetzt habe ich gerade die PNGs auf meine Website gestellt. Ich öffne diese Bilder, Sie werden sehen, dass sie genau für den Stein, eines für Papier und das andere für Scheren sind eines für Papier und das andere für Scheren Angesichts der Tatsache, dass PNGs auch transparente Hintergründe haben können Und wenn wir uns das Format der URL genauer ansehen, was wir dort haben, dann ist es ungefähr so Okay? Das ist die Adresse der Website. Aber hier können wir dieses Muster durch dieses zufällige Zeichen ersetzen . Aufgrund dieses Zufallszeichens haben wir die Werte Stein, Papier oder Schere. Lass uns das machen. Ich komme und schaffe eine neue Konstante. Und diese Konstante wird mit dieser vollständigen URL gleichgesetzt. Und nach diesem zufälligen Zeichen, diesem PNG, ist es ganz nett, weil ich jetzt herkommen und für den Inline-Stil dieses Hintergrundbild hinzufügen kann jetzt herkommen und für den Inline-Stil dieses Hintergrundbild hinzufügen Gehen wir zurück und lassen Sie uns aktualisieren. Wir werden jetzt sehen, dass wir diese Bilder in unseren Komponenten platziert haben, und tatsächlich ist noch ein bisschen Text übrig. Also kann ich jetzt kommen und das löschen, da wir es nicht mehr benötigen. Sehen wir uns das letzte Beispiel in Aktion an. Es sieht ganz nett aus. Beispielsweise wirst du bei jeder Aktualisierung sehen, dass für jeden Spieler neue Schilder gezogen werden. Als letzte Anmerkung: Denken Sie bitte daran, dass wir in den Stilen für die Spielerkarte all das haben. Wir haben die Hintergrundwiederholung, die Größe des Hintergrunds, den Ursprung des Hintergrunds und so weiter. Und tatsächlich sind dies die CSS-Regeln, die es uns ermöglichen , diese Bilder auf der Spielerkarte schön aussehen zu lassen. Das ist es. Gehen wir zur nächsten Lektion über. Wir werden sehen, wie man diese nette Animation hinzufügt , wenn wir die Starttaste des Spiels drücken. 9. Der useState()-Hook: Nachdem wir die Inline-Stile eingerichtet haben, schauen wir uns die endgültige Version unseres Beispiels noch einmal an die endgültige Version unseres Beispiels Unser Spiel beginnt in einem leeren Zustand. Du kannst jetzt sehen, dass jeder Spieler einen leeren Status hat. Für einen Spieler wurde noch kein Schild gezogen. Erst wenn ich auf diese Spieltaste drücke, startet die Shuffling-Animation und jeder Spieler erhält ein zufälliges Zeichen Im Moment sieht es so aus, dass unsere Spieler, jeder von ihnen, bereits mit einem bestimmten Zeichen beginnen Und der Grund dafür ist , dass wir, wenn wir mit einem Inline-Stil beginnen , dieses Hintergrundbild auf der Grundlage des zufälligen Zeichens festlegen , das sofort generiert wurde. Das wollen wir ändern. Aber mehr noch, was wir hier ändern wollen, ist die Tatsache , dass ich möchte, dass das eigentliche Spiel startet , wenn ich diese Taste drücke. Wenn wir uns das Datenflussdiagramm ansehen, wollen wir von hier aus im Grunde die beiden Teile machen . Wenn wir die Start Gate-Taste drücken, um ein Ereignis an jede Spielerkomponente zu senden. Mal sehen, wie wir das machen können. Zuallererst müssen wir ändern, wie die Dinge hier drinnen sind. Anstatt dieses zufällige Zeichen jedes Mal generieren zu lassen, wenn die Komponente gerendert wird, wollen wir das Design in einer Zustandsvariablen extrahieren. Deshalb wollen wir einen U-State-Hook verwenden. Unter normalen Bedingungen importieren Sie einen U-Staat, also sagen Sie, importieren Sie den U-Staat aus React. Aber angesichts der Tatsache, dass wir keinen Webserver verwenden, haben wir diese sehr minimale Konfiguration. Wir müssen hier eine kleine Änderung vornehmen. Und ich werde den U-Staat wie so const importieren und die Destrukturierungsanweisung in Javascript auf die Reaktion anwenden in Javascript auf die Denken Sie jedoch daran, dass Sie, wenn Sie eine neu erstellte App verwenden, importieren müssen, wie sie hier ist Jetzt, wo wir den US-Bundesstaat korrekt importiert haben , werde ich hierher kommen. In der Player-Komponente werde ich die neue Zustandsvariable definieren, werde ich die neue Zustandsvariable definieren mit diesem U-Status erstellt wurde wird dann sin und set sign sein. Es ist okay, dass wir mit einer Neal-Variablen beginnen, weil wir hier die Player-Komponenten starten wollen hier die Player-Komponenten starten wollen ohne dass etwas ausgewählt wurde Diese festgelegte Zustandsvariable wird das Zufallszeichen, das wir hier haben, ersetzen Mehr noch, wir können alles extrahieren, was hier drin ist, die gesamte Zufallsgenerierung Wir wollen es in einer Funktion extrahieren. Wir sollten in der Lage sein, diese Funktion aufzurufen. Wenn wir die Taste drücken, ersetze ich alles, was wir hier haben, durch diese Funktion. Wenn Sie einen Blick darauf werfen, enthält diese Funktion „Pick Random Sin“ einfach genau die gleichen Zeilen, die wir zuvor hatten. Nur dass wir am Ende das Zufallszeichen in dieser Set-Sign-Zustandsvariablen setzen und alles in eine nette Funktion verpackt ist. Jetzt müssen wir noch herausfinden, wie wir vorgehen müssen herausfinden, wie wir , damit diese Funktion „Zufallszeichen auswählen“ mit der Schaltfläche verknüpft wird. Wie können wir das so machen , dass diese Funktion aufgerufen wird, wenn wir die Taste „Spiel starten“ drücken . Ich überlasse dir das als Hausaufgabe. Versuche das zu tun, bevor du das nächste Video startest. Ich denke, es gibt mehrere Möglichkeiten, wie wir das machen können, aber wenn du als Tipp willst, solltest du versuchen, den Benutzer fa hook zu verwenden. 10. Ereignisse in den Kinderkomponenten auslösen wip: Wie konnten Sie dafür eine Lösung finden? Wenn wir die Schaltfläche Spiel starten drücken, um Ereignisse an diese A-Komponenten zu senden , sodass neue zufällige Zeichen ausgewählt werden. Es gibt mehrere Möglichkeiten , dieses Problem zu beheben. Sehen wir uns einen Plan für das an, was wir tun wollen. Zunächst geben wir von der Spielkomponente einen neuen Parameter namens Startzeit an die Player-Komponente weiter . Innerhalb der Player-Komponente werden wir uns die Startzeit über den Use-Effect-Hook ansehen. Wenn diese Startzeit geändert wird, rufen wir die Methode „ Pick Random Sign“ auf. Schließlich werden wir in der Spielkomponente die Startzeit aktualisieren, wenn die Taste gedrückt wird. Lassen Sie uns das alles in Aktion sehen. Zuallererst werde ich auf die Spielkomponente eingehen. Hier werde ich eine neue Zustandsvariable erstellen. Diese wird, wie gesagt, Startzeit heißen. Es hat auch diese eingestellte Startzeitfunktion. Es beginnt mit dem Nullwert, da Sie zu Beginn keine zufälligen Zeichen erkennen möchten . Jetzt, wo diese Startzeit festgelegt ist, werde ich in beiden Player-Komponenten darauf eingehen. Ich werde den Startzeitparameter senden. Ich werde es für die erste Komponente senden und danach werde ich es auch an die nächste Komponente senden. Dieser Startzeitparameter muss an einem Punkt aktualisiert werden. Dafür werde ich eine neue Funktion erstellen. Diese Funktion wird eine Konstante mit dem Namen Start Game sein. Dieses Spiel wird so aussehen, also wird die Startzeit auf das Datum festgelegt. Jetzt wählen wir das aktuelle Datum und die aktuelle Uhrzeit des Browsers aus und aktualisieren es jedes Mal, und aktualisieren es jedes Mal wenn jemand die Schaltfläche Spiel starten drückt. Schließlich werden wir die Onclick-Funktion verwenden. Wenn jemand die Taste drückt, rufen wir das Startspiel Nun , da wir wissen, dass die Player-Komponenten diesen neuen Parameter für die Startzeit haben werden, werde ich ihn hier deklarieren und ihn in die Parameter der Komponente einfügen. Wir müssen beobachten, wann diese Startzeit geändert wird. Dazu müssen wir den Use-Effect-Hook importieren. Ich werde hierher zurückkehren und hier werde ich auch den Effekt nennen. Denken Sie daran, wenn wir ein normales Web hätten, müssten Sie es von hier importieren Importiere es direkt aus React. Da dies jetzt erstellt wurde, fügen wir den Use-Effect-Hook den Use-Effect-Hook innerhalb der Player-Komponente hinzu. Wir werden das Folgende tun. Wir werden prüfen, ob es eine Startzeit gibt. Denken Sie daran, dass diese Startzeit anfänglich Null ist. Wenn wir die Startzeit geändert haben, nennen wir das Pick Random Sign. Denken Sie daran, wie der Nutzungseffekt funktioniert. Effect erhält als Parameter ein Array von Werten. Jedes Mal, wenn diese Werte geändert werden, die Funktion ausgelöst, die im Nutzungseffekt enthalten ist wird die Funktion ausgelöst, die im Nutzungseffekt enthalten ist. Mal sehen, jetzt ist das in Aktion. Ich werde es jetzt aktualisieren. Anfänglich werden wir keine Werte in den Spielerkomponenten haben , aber wenn wir auf die Schaltfläche „Spiel starten“ drücken, werden danach zunächst einige zufällige Elemente gezogen. Mehr und so weiter. Im Grunde haben wir einen Weg gefunden, wie wir das Spiel starten können , wenn wir diese Taste drücken. Ziemlich cool. Im nächsten Kapitel werde ich auch die Shuffling-Animation hinzufügen, wenn diese Taste gedrückt wird 11. Animationen und setInterval: Schauen wir uns das letzte Beispiel noch einmal an. Wenn wir die Taste drücken, werden Sie sehen, dass wir diese Animation haben, die jedes Mal läuft, wenn ein zufälliges Zeichen gezogen wird. Wie können wir das in unserem Beispiel umsetzen? Denn im Moment drücken wir einfach auf das Sternspiel und schon haben wir direkt die Elemente gezeichnet, aber keine Animation. Nun, auch hier gibt es mehrere Möglichkeiten, dies zu tun. Es gibt auch eine reine CSS-Lösung, die wir anwenden können. Aber auch hier werden wir die Lösung sein , die es uns ermöglicht, mit einigen Mechanismen zu spielen oder zu reagieren und zu sehen, wie wir einige Fehler vermeiden können. Lass es uns versuchen. Was wir hier tun werden, ist diese festgelegte Intervallfunktion zu verwenden. Dies ist eine Javaski-Funktion, die nicht von React abhängt Im Grunde genommen nenne ich diese Funktion Weitergabe einer Funktion, die bei jeder Verzögerung ausgeführt wird Nehmen wir an, ich möchte jede Sekunde einen Code ausführen . Ich füge hier 1.000 ein, weil es 1 Million Sekunden sind. Und dann wird dieser Code in jeder Sekunde ausgeführt , wenn der Zyklus abgeschlossen ist . Wenn ich diesen Code nicht mehr ausführen muss, muss ich diese klare integrale Funktion aufrufen. Schauen wir uns also in unserem Beispiel an, wie wir das implementieren können. Zuallererst müssen wir wissen, wie oft die Animation ausgeführt wurde. Schauen wir uns das noch einmal an, wir werden sehen, dass es eine Weile dauert und danach aufhört. Das liegt daran, dass wir eine Startzeit von 20 Animationen festgelegt haben. Ich muss hierher kommen und eine neue Statusvariable namens Animation Counter erstellen . Dieser Animationszähler fängt bei Null an. Dieser wird verfolgen wie oft unsere Animation ausgeführt wurde. Und im Auswahl-Zufallszeichen werde ich die Funktion Set Interval hinzufügen Wir wollen, dass Code mit 100 Millisekunden ausgeführt wird, zehnmal zehnmal Was dieser Code ist, ist genau der, der sich zuvor direkt im Stammverzeichnis der Funktion befand Jetzt wird er in die Set-Integral-Funktion verschoben, wir wollen bei 100 Millisekunden ein neues Zufallszeichen auswählen Aber was wir tun wollen, wir wollen auch, dass diese Animation irgendwann diese Animation Ich werde herkommen und schauen, ob der Animationszähler größer als 20 ist. Wir müssen das Integral löschen, um die Animation zu beenden. Und was ich dann in der Funktion Clear Integral weitergegeben habe , ist genau diese, die Referenzen, die ich hier gemacht habe. Eine letzte Sache , die wir tun müssen. Es geht auch darum, an einem Punkt zu inkrementieren , an diesem Animations-Cotter Jedes Mal, wenn dieses Integral ausgeführt wird, sage ich hier Animation Conta Wir sollten es um eins erhöhen. Lassen Sie sich nicht dazu verleiten, so etwas zu tun denn wenn wir es so machen, werden wir am Ende einige Denken Sie daran, dass wir den Status set , wenn er auf vorherigen Werten ausgeführt , wenn er auf vorherigen Werten ausgeführt wird, so aufrufen müssen Es wird über eine Funktion aufgerufen , die Zugriff auf den vorherigen Wert erhält , und wir erhöhen diesen Wert um eins Okay, Dock, jetzt werden wir es ausführen. Lass uns die Starttaste für das Spiel drücken. Du wirst sehen, dass wir die Animation zum Laufen haben, was ziemlich cool ist. Ich werde die Seite für den Moment neu laden. Wenn Sie mit diesem Beispiel spielen, werden Sie feststellen, dass es in der nächsten Lektion zwei Bugs gibt , bevor Sie tatsächlich angefangen haben Versuchen Sie zunächst herauszufinden, was die beiden Bugs sind , und probieren Sie es aus. Versuche sie zu beheben. Wir sehen uns dann in der nächsten Lektion. 12. useRef() und bereinigen useEffect() hinzufügen: Am Ende hatten wir in der letzten Lektion einige Bugs in unserem Code. Ich habe dir als Hausaufgabe die Idee hinterlassen, diese Fehler zu finden und zu beheben. Lassen Sie uns zunächst sehen, was sie sind. Es gibt zwei Hauptfehler in unserem Code, und ich habe dieses Bild erstellt, damit sie es zeigen können. Zuallererst, wenn wir die Animation starten, werden Sie feststellen, dass diese Animation für immer läuft. Sie hört nicht nach 20 Läufen auf, auch wenn wir hier eine sehr klare Bedingung haben , dass wir aufhören müssen, wenn eine Begegnung länger als 20 ist. Das ist der erste Bug und vielleicht auch der wichtigste , wenn wir die Animation starten. Und danach werde ich schnell vorspulen, ich drücke diese Taste, du wirst sehen, dass die Animation anfängt seltsam zu werden. Es geht auch viel zu schnell, dass es sollte, es hört nicht auf. Schließlich gibt es noch einen dritten Fehler , der am einfachsten zu beheben ist. Sie werden sehen, wenn wir jetzt das Bild in der Datei betrachten, werden Sie sehen, dass wir diese Null haben, dieses PNG, die Tatsache, dass unsere Datei versucht , diese Null, diese PNG-Datei abzurufen. Fangen wir mit dieser tief hängenden Frucht an. Lassen Sie uns zunächst versuchen, diesen Fehler zu beheben, der in der Konsole angezeigt wird. Der Grund dafür ist eigentlich diese Zeile, das Hintergrundbild. Was wir hier tun , ist, dass wir versuchen, das Bild von der JS-Scheißseite abzurufen, und wir haben hier das Schild Zunächst können Sie sehen, dass dieses Zeichen mit dem Nullwert beginnt Das ist der Grund, warum wir diesen Fehler bekommen, weil wir hier versuchen die Assets abzurufen, was auch immer. Danach das PNG, eine recht einfache Lösung für dieses ist es, zu testen, ob das Zeichen existiert. Wenn das Zeichen existiert, versuchen Sie, das Bild abzurufen Andernfalls tun Sie nichts, rufen Sie hier einfach eine leere Zeichenfolge Lassen Sie uns aktualisieren und Sie werden jetzt sehen , dass der Fehler in der Konsole nicht vorhanden ist. Das war der erste Bug. Gehen wir nun zum komplexesten über. Die Tatsache, dass wir beim Starten der Animation keine Fehler bekommen, aber die Animation läuft für immer, auch wenn hier diese Bedingung vorliegt. Der Grund, warum das passiert, liegt darin, dass dieser Teil so ist, als ob der in React eingestellte Zustand nicht synchron ist. Wenn wir versuchen werden, diese Bedingung auszuführen, wird sie noch nicht aktualisiert Wenn ich hier zum Beispiel eine Begegnung mit einem Consolo aufnehme und das Spiel aktualisiere und starte, werdet ihr sehen, dass es für immer Null ist Und der Grund dafür ist , dass er nicht die Gelegenheit hatte, das vollständige Update tatsächlich durchzuführen Eine Möglichkeit, dies zu beheben, besteht darin , alles in die setanym-Zählerfunktion einzubinden und diesen vorherigen Wert als Referenz zu verwenden. Ich habe zum Beispiel im Handbuch für den Kurs dieses Beispiel gemacht Was wir tun können, ist hier einen großen Wrap zu machen und den ganzen Code in den Stan-Zähler zu legen den ganzen Code in den Stan-Zähler Und wir werden jetzt mit Sicherheit wissen, dass der Statuswert aktualisiert wurde und den richtigen Wert hat. Aber das ist nicht großartig, weil es tatsächlich das Pick-Rand-Funktionsintegral gibt, einen festgelegten Zustand, es ist ein bisschen zu viel. Eine andere Sache, die wir versuchen können , ist, Referenzen zu verwenden. Es ist großartig, mit Referenzen zu arbeiten und sie in React zu verwenden. Formulare eignen sich auch hervorragend zum Speichern Werten, die zwischen den Rendervorgängen beibehalten werden , aber nicht auf der eigentlichen Benutzeroberfläche angezeigt werden müssen. Was ich hier tun muss, ist, diesen beliebigen Zähler durch eine beliebige Gegenreferenz zu ersetzen beliebigen Zähler durch eine beliebige Gegenreferenz Angesichts der Tatsache, dass wir diese Arbeit verwenden wollen, weil F eigentlich eine Referenz ist, muss ich sie aus dem tatsächlichen Wert der Referenz importieren , der im aktuellen Feld der Referenz gespeichert ist . Was wir hier tun müssen, ist, wenn wir die Animation starten, diesen Zähler zu nehmen und zu sagen, dass Strom gleich Null ist Danach werde ich, anstatt die festgelegte Zustandsvariable zu verwenden , Gehen Sie zurück zur Referenz und sagen Sie, dass ich sie um eins erhöhen möchte. Schließlich kann ich hier einfach diese anstelle der früheren Zustandsvariablen verwenden. Mal sehen, wie es läuft. Danach gehe ich zurück und refresh. Wenn wir Spiel starten drücken. Jetzt stoppt die Animation nach 20 Iterationen. Lass uns das Spiel erneut aktualisieren. Und die Animation wird jetzt nach 20 Läufen gestoppt, was großartig ist. Wir haben einen weiteren Fehler behoben. Lassen Sie uns abschließend den letzten Fehler angehen. Ich werde zum Beispiel zurückkehren, jetzt fange ich an, sehr schnell auf die Schaltfläche zum Starten des Spiels zu drücken. Du wirst sehen, dass die Animation viel zu schnell läuft, dass sie das sollte, es gibt eigentlich zwei Möglichkeiten. Es gibt mehrere Möglichkeiten, aber zwei Hauptwege, wie wir das beheben können. Eine Möglichkeit, dies zu tun, besteht darin, eine andere Statusvariable zu verwenden und diese Schaltfläche zu deaktivieren während die Animation läuft, was in Ordnung ist. Aber gehen wir zu einem anderen Thema über, wir reagieren darauf und das ist die Funktion zur Bereinigung von Nutzungseffekten. Im Grunde passiert es, wenn wir diese Taste sehr schnell drücken , der Startzeitparameter wird geändert. Wir rufen diese Zufallszeichenfunktion ein paar Mal auf. Tatsächlich machen wir mehrere Intervalle, die laufen und unser Vorzeichen sehr schnell ändern. Das ist der Grund, warum sich die Animation so verhält. Eine Sache, die wir tun können, ist die Bereinigungsfunktion von Effect zu verwenden. Effect hat eine Funktion , die wir nur wie folgt zurückgeben müssen . Diese Funktion, die ich hier habe, wird also jedes Mal aufgerufen, wenn ein neuer Nutzungseffekt ausgeführt wird. Auf diese Weise stellen wir sicher, dass wir alle Auswirkungen eines vorherigen Laufs beseitigen. Eigentlich wollen wir hier dieses Integral löschen. Im Grunde wollen wir das auch hier nennen. Wir sollten so etwas haben. Aber Sie sehen, dass das eigentliche Integral in dieser Funktion gebildet wird und wir es hier brauchen. Eine andere Sache , die wir tun können, ist eine zweite Referenz zu erstellen, diese, ich werde diese Funktion einfach hierher kopieren und ich werde hier mein Integral O sagen. Anstatt nur eine lokale Variable zu erstellen, die nicht dem Nutzungseffektbereich ausgesetzt ist, kann ich nur kommen und diese Referenz abholen. Ich würde sagen, dass die aktuelle Zahl dem eingestellten Integral entspricht Ich werde hier abhauen. Aber jetzt kann ich auch hier ausräumen. Da das eigentlich nur eine Zeilenfunktion ist, kann ich alles durch nur diese ersetzen , damit es ein bisschen schöner aussieht Lassen Sie uns nun das Beispiel noch einmal ausführen. Sie werden sehen, dass jedes Mal, wenn ich jetzt sehr schnell die Taste drücke, die Animation trotzdem so läuft, wie sie sein sollte. Jedes Mal, wenn ich die Taste erneut drücke, wird diese ausgeführt und das aktuelle Intervall wird gelöscht. So konnten wir all unser Bellen reparieren. Sehen wir uns in der nächsten Lektion an, wie wir die A-Kontext-API verwenden können , um Werte von einer Komponente zur anderen zu kommunizieren 13. Kontextanbieter in React: Jetzt, da unsere Anwendung wieder kostenlos ist, gehen wir zum vielleicht letzten Schritt bevor wir den Gewinner des Spiels ermitteln und die Bewerbung abschließen. Dieser Teil befasst sich mit der Art und Weise, wie wir zwischen Komponenten kommunizieren. Schauen wir uns unser letztes Beispiel an. Wir haben diese beiden Spielerkarten darin. Es werden einige zufällige Zeichen gezogen. Auf der anderen Seite gibt es die Resualboard-Komponente, die wir hier haben. Sie sollte wissen , was jeder Spieler ausgewählt hat um zu entscheiden , wer das Spiel gewonnen hat Wir können das tun, indem wir Requisiten von einer Komponente an eine andere weitergeben , aber in diesem Fall wird es etwas kniffliger sein Wir können es schaffen, aber es wird schwieriger sein. Ein weiterer Nachteil dieses Ansatzes ist die Tatsache, dass wir am Ende zu viele Requisiten bohren So werden Dinge genannt, wenn wir zu viele Komponenten von einer Komponente an eine andere weitergeben zu viele Komponenten von einer Komponente an eine andere Eine andere Möglichkeit, dies zu beheben und auch mit einigen Funktionen von React zu spielen , besteht darin , den Kontext zu verwenden. Mal sehen, wie das aussieht. Wir wollen einen Reaktionskontext einrichten. Nachdem jeder Spieler ein zufälliges Zeichen ausgewählt hat, teilt er dem Kontext mit, welches Zeichen ausgewählt wurde . Danach nimmt unsere Resulusboard-Komponente beide Zeichen aus dem Kontext auf Es wird entscheiden, wer das Spiel gewonnen hat. Sie können sich den React-Kontext als allgemeinen Datenspeicher für die Anwendung vorstellen . Ich werde im Handbuch für diesen Kurs ein Video verlinken, das ich vor einiger Zeit gedreht habe und in dem es detaillierter erklärt wird, wie Act-Kontext funktioniert Aber im Grunde können Sie sich das so als einen allgemeinen Ort vorstellen , an dem wir Daten ablegen können , auf die jede Komponente einer bestimmten Anwendung zugreifen jede Komponente einer bestimmten Anwendung Am Ende der beiden Lektionen, dieser und der nächsten Lektion, wollen wir eine Ergebnis-Board-Komponente haben, die so aussieht, dass sie weiß, was der rote Spieler ausgewählt hat und auch, was der blaue Spieler ausgewählt hat. Schauen wir uns an, wie wir all dieses Gerede in Code übersetzen können . Als Erstes muss ich einen Kontext für unser Spiel erstellen. Dieser wird genau wie der Spielkontext benannt, Spielkontext entspricht dem Erstellungskontext Diese Funktion zum Erstellen von Kontext ist eine Funktion, die von React stammt. Wenn wir einfach einen Kontext erstellen, können wir nicht zu viel damit anfangen, da wir hier auch einen Kontextanbieter erstellen müssen. Ich werde einen Spielkontextanbieter erstellen , der auf diesem Kontext basiert, den wir hier erstellt haben. Wir können diesen Anbieter, den wir gerade erstellt haben, an unsere App weitergeben und das gesamte Spiel in den Spielkontext-Anbieter einbinden wir gerade erstellt haben, an unsere App weitergeben und an unsere App weitergeben und . Wir können in jeder seiner Unterkomponenten nachlesen, was wir zu diesem Zeitpunkt in den Spielkontext stellen Wenn ich die Datei speichere und aktualisiere, wirst du feststellen, dass wir einige Probleme haben, was hier passiert ist. Der Grund, warum die LUI verschwunden ist , ist , dass wir jetzt den Spielkontext-Provider rendern Und in der Tat werden wir als Kinder weitergegeben. Wir geben das Spiel weiter, aber hier, beim eigentlichen Anbieter, wir diese Kinder nicht aus. Also müssen wir kommen und einen neuen Eigenschaftsnamen hinzufügen. Kinder. Tatsächlich ist dies eine Standardeigenschaft für jede React-Komponente. Lassen Sie uns es aktualisieren und Sie werden sehen, dass die Dinge jetzt wie zuvor aussehen. Nur dass unser Spiel jetzt in diesem Anbieter enthalten ist . Eine coole Sache, die wir tun können, ist, einen Bundesstaat für den Anbieter hinzuzufügen. Und dieser Status wird an alle Komponenten dieser Anbieter weitergegeben . Mal sehen, wie wir das machen können. Ich werde hierher kommen und den Staat des Spieleanbieters hinzufügen , was wir in unserem Bundesstaat einschränken müssen. Wenn wir darüber nachdenken, werden es die Spielerzeichen sein, was hat der rote Spieler ausgewählt. Und was hat der blaue Spieler ausgewählt? Damit kann ich jetzt hierher kommen und diese Werte, die Spieler-Sines und die Seta-Funktion, weitergeben Ich werde es an den Anbieter weitergeben. Zu diesem Zeitpunkt werden die Dinge so aussehen wie zuvor, es werden keine Fehler in der Konsole auftreten, nur dass wir diese Werte in jeder Unterkomponente des Context-Providers lesen können jeder Unterkomponente des Context-Providers In der nächsten Lektion werden wir sehen , wie man diese Werte aktualisiert und wie man sie liest. 14. Der useContext()-Hook: Am Ende der vorherigen Lektion ist es uns gelungen, diesen Spielkontext zu erstellen und einzurichten Wir haben unser Spiel in diesen Spielkontext-Anbieter integriert. Lassen Sie mich Ihnen zur Erinnerung zeigen, was wir hier versuchen zu tun. Wir versuchen, die Zeichen zu lesen, die von diesen beiden Spielerkarten aufgenommen wurden diesen beiden Spielerkarten und die Zeichen in den realen Kontext zu stellen. Danach können wir in der Ergebnisliste die Zeichen verwenden, sodass wir entscheiden können, wer das Spiel gewonnen hat. Das Ziel dieser Lektion ist es, diese Elemente zu lesen und sie auch festzulegen, wenn sie ausgewählt werden. Beginnen wir damit, den Spielkontext in einer Komponente zu lesen. Ich werde in die Player-Komponente gehen. Hier werde ich den folgenden Kontext, Kontext, Spielkontext schreiben . Das bedeutet, dass wir einen anderen Hook verwenden. Wir müssen es von hier importieren. Dieser Hook ermöglicht den Zugriff auf einen bestimmten Kontext In unserem Fall ist er der einzige Kontext , den wir haben, der Spielkontext. Zur Erinnerung: Wir haben diese beiden Zustandsvariablen für den Kontext festgelegt, die roten und die blauen Werte für jeden Spieler. Lassen Sie mich das protokollieren. Ich protokolliere den Kontext. Mal sehen, ob wir diese beiden Elemente tatsächlich dort haben , während wir auf die Konsole gehen. Und Sie können hier sehen , was wir von diesem Consologan-Objekt bekommen und was es als Erstes zurückgibt, der Spieler signiert, dass wir es eingerichtet haben und auch die Set-Funktion für diese Zustandsvariable Das ist ziemlich cool , weil wir mit der Funktion „Zufallszeichen auswählen“ diese beiden Werte einstellen können , den roten und den blauen Aber bevor wir dorthin gehen, können wir diese Linie ein wenig verbessern. Anstatt nur das zu schreiben, kann ich die Strukturierungsanweisung verwenden. Zusammen mit dem Spielkontext kann ich sagen, dass ich die eingestellte Funktion und die Spielerzeichen abrufen möchte . Angesichts der Tatsache, dass wir jetzt diese Methode haben , Spielerzeichen zu setzen sollte ich herkommen und sie aufrufen und sagen, okay, Spielerzeichen setzen. Aber jetzt habe ich es hier in das if geschrieben, wenn das letzte Element gezeichnet ist. Jetzt ist die Frage, was soll ich hier schreiben? Und denken Sie daran, dass wir hier versuchen, ein Element zu aktualisieren. Wir versuchen hier, ein Objekt in einem Reaktionszustand zu aktualisieren. Denn lassen Sie uns noch einmal gehen, zurück im Provider, Sie werden sehen, dass es sich bei diesem Objekt um ein echtes Objekt handelt. Der Weg, dies zu tun, besteht darin, auch einen vorherigen Wert zu verwenden. Was wir hier tun werden, ist, alle Elemente , die wir bereits im Objekt haben, zu verteilen , die wir bereits im Objekt haben und einfach zu überschreiben, was wir brauchen In unserem Fall überschreiben wir die Farbe des Spielers und das zufällige Zeichen, das ausgewählt wurde Vor diesem Hintergrund gehen wir jetzt zurück zum Zulus-Board und schauen uns an, was wir im Kontext haben Ich werde hier hingehen, ich werde diese beiden Zeilen hinzufügen. Zuallererst extrahiere ich die Spielerzeichen aus dem Kontext Danach füge ich eine weitere Ebene der Strukturierung hinzu, und diese extrahiert genau die blauen und roten Werte Lassen Sie mich die beiden protokollieren. Ich werde blau sagen. Lass uns aktualisieren und jetzt lass uns das Spiel starten. Sie werden sehen, dass wir bei den Nullwerten angefangen haben und am Ende das Papier und den Stein erhalten haben, genau das, was wir hier haben. Das ist ziemlich cool, denn jetzt können wir diese Komponente mit der entschlossenen Box vervollständigen , indem zeigen, was jeder Spieler gezogen hat Im Grunde genommen dieser Teil von hier. Ich werde das Consolo entfernen , weil wir es nicht brauchen. Zuallererst sollten wir überprüfen, ob beide Elemente gesetzt sind Falls eines dieser blauen oder roten Elemente nicht gesetzt ist, sollten wir noch keine Ergebnisse genau so zurückgeben , wie wir es in diesem Moment haben Wenn danach beide Elemente gesetzt sind, können wir diese Zeile schreiben. Lass mich auffrischen. Ich werde das Spiel zunächst starten, es gibt keine Ergebnisse. Und danach wird es mir sagen, okay, dieser blaue Spieler hat Rock ausgewählt, dieser rote Spieler hat Rock ausgewählt. Und genau das haben wir auch hier. Damit haben wir ein Beispiel dafür behandelt, wie wir den A-Kontext verwenden können, um Werte auf einfache Weise von einer Komponente zur anderen zu senden , ohne zu viele Eigenschaften weitergeben zu müssen. Schauen wir uns das letzte fehlende Puzzleteil an und sehen wir, wie wir den Gewinner ermitteln werden. Wie können wir also so etwas schreiben? Der Gewinner ist der blaue Spieler oder der rote Spieler. 15. Entscheide den Spielsieger: Das letzte Puzzleteil besteht darin, herauszufinden, wer das Spiel gewonnen hat, und den Gewinner zu nennen. In dieser Lektion werden wir übrigens kein neues React-Zeug vorstellen, es ist nur reines Javas Wir werden den Gewinner in der Ergebnistafel ermitteln. Dafür erstelle ich eine neue Funktion. Dieser wird Win heißen. Es gibt uns Parameter, die roten und blauen Werte für die Spieler. Nachdem ich diese Funktion erstellt habe, müssen wir sie auch A im zurückgegebenen X der Komponente nennen . Wir werden den folgenden Algorithmus verwenden. Nein. Um den Gewinner zu ermitteln, prüfen wir, ob es ein Unentschieden gibt und ob die Symbole gleich sind. Danach prüfen wir, ob Rot gewinnt. Wenn es kein Unentschieden gibt und auch Rot nicht gewonnen hat, kann man davon ausgehen, dass der blaue Spieler gewinnt. Lassen Sie uns zuerst die einfache Sache überprüfen. Um zu überprüfen, ob wir ein Unentschieden haben, müssen wir nur überprüfen, ob Rot gleich Blau Wenn wir wollen, diese Zeichenfolge, die prüft, ob der rote Spieler wir ist, ist es etwas kniffliger, es wird so aussehen Deshalb haben wir hier die drei wichtigsten Bedingungen aufgelistet , unter denen Rot gewinnt. Dies sind die möglichen Kombinationen , die den roten Spieler zum Gewinner machen. Wenn wir eine dieser Bedingungen haben, geben wir diese Zeichenfolge zurück. Schließlich ist diese die einfachste, bei der wir nicht einmal nichts überprüfen müssen , weil wir bereits überprüft haben, ob wir eine rote haben. Der blaue Spieler gibt einfach die Zeichenfolge zurück , wenn dies nicht wahr ist oder nicht wahr ist. Lassen Sie uns das alles jetzt in Aktion sehen. Ich werde es aktualisieren. Ich werde das Spiel starten, und am Ende wird es mir zeigen, wer das Spiel gewonnen hat und tatsächlich Recht hat, denn Papier schlägt Stein. Gehen wir noch eine Runde. Hier drin ist es genauso. Stein ist besser als Schere. Ja, das ist es. So schreiben wir eine Funktion , um nach dem Gewinner zu suchen. Übrigens, falls Sie der Meinung sind, dass das ein bisschen zu viel ist, habe ich im Handbuch auch das Refactoring von Funktionsstörungen hinzugefügt auch das Refactoring von Funktionsstörungen Meiner Meinung nach sieht es so aus, in der Tat ist es etwas kompakter, hat Aber ich denke, es ist etwas schwieriger zu lesen. Ich weiß nicht, was auch immer funktioniert, du kannst es dir aussuchen und es wird okay sein. 16. Kursprojekt: Jetzt, wo wir all diese neuen Dinge gelernt haben, ist es an der Zeit, sie in die Tat umzusetzen. Wir möchten unserem Spiel ein paar neue Funktionen hinzufügen. Zuallererst wollen wir hier ein Punkte-Tracker-Panel haben. Und auch jeder Spieler sollte seinen eigenen Namen haben. Und diese Namen können bearbeitet werden. Sehen wir uns die endgültige Version von Home Work in Aktion an. Ich drücke die Stargame-Taste, nachdem ein Spiel gelaufen ist Du wirst sehen, dass wir jetzt hier einen Zähler haben. Blau hat einen Sieg und Rot hat keine Siege. Und wir können den Punktestand auch auf Null zurücksetzen. Und die Tatsache, dass wir diese Namen hinzugefügt haben, kann ich jetzt auch bearbeiten und sagen, okay, ich möchte, dass mein neuer Name Daniel ist und das wird hier aktualisiert. Und statt CPU will ich spielen, sagen wir mal gegen KI und auch der Name wird dort aktualisiert. Als allgemeine Regel gilt: Bitte versuchen Sie zuerst, all dies selbst zu erledigen, und wenn es nicht funktioniert, schauen Sie sich die nächste Sitzung dieses Videos an. werde ich Ihnen am Ende einige Tipps geben, wie Sie diese neuen Funktionen erstellen können. Sie können auch auf der Seite mit Wenn Sie möchten, werde ich Ihnen am Ende einige Tipps geben, wie Sie diese neuen Funktionen erstellen können. Sie können auch auf der Seite mit den Hausaufgaben nachschauen, den Hausaufgaben nachschauen wo Sie den Code sehen können , mit dem wir all das erstellen können. Von diesem Moment an werde ich Ihnen einige Tipps geben, wie Sie diese neuen Funktionen erstellen können. Denken Sie also daran, dass wir von diesem Moment an einige Spoiler hier haben Gehen Sie einfach nur zu diesem Abschnitt, wenn Sie zunächst versucht haben, das Spiel selbst zu Zunächst werde ich mit dieser Funktion beginnen und den Spielern Namen hinzufügen. Ich denke, dieser ist ein bisschen einfacher zu implementieren. Fast alle Änderungen müssen hier in der Player-Komponente vorgenommen werden . Das erste, was ich hier tun werde , ist einen Player-Parameter hinzuzufügen. Dieser Parameter wird direkt aus dem Spiel stammen. Danach werde ich mit diesem Spielerparameter eine Statusvariable für den Spielernamen festlegen. Wenn wir auf diesen Namen klicken, verwende ich dieses Fenster. Fensteraufforderung ist eine Javaski-Funktion, keine Reaging-Funktion, die es uns ermöglicht, Fenster wie dieses zu erstellen, in denen Sie den neuen Namen eingeben können, das Zeug, das Sie hier gesehen haben Nachdem wir den neuen Wert von der Windows-Eingabeaufforderung gelesen haben, sollten wir den Status aktualisieren Und damit sollten wir die neue Funktion vervollständigen. Übrigens gibt es hier auch einen Bonus, bei dem wir versuchen können, all das in einer Spielernamen-Komponente zu extrahieren , nur einschließlich des Spielers, dieser Spielernamen-Komponente. Kommen wir nun zum zweiten Feature, dem Teil mit der Anzeigetafel. Dieser Teil genau hier. Alles sollte hier in diese Tafel passen. Hier sollte die Anzeigetafel stehen. Wir sollten als Layout eine Schaltfläche hinzufügen. Das kann ein Titel oder etwas Ähnliches und auch ein Absatz mit diesem Text. Während wir diesen hinzufügen, werden wir den Status der Resulusborg-Komponente etwas komplizieren den Status der Resulusborg-Komponente Was wir hier tun müssen, ist mehrere Statuswerte für Score Bred, Score Blue und auch einen aktuellen Gewinner hinzuzufügen , oder wir können auch ein zentralisiertes Objekt hinzufügen, wir fassen den Status in nur einem einzigen Objekt zusammen Eine weitere Sache, die wir tun müssen, ist den Use-Effect-Hook zu verwenden, um diesen zu ersetzen. Wir haben hier den Gewinner der Auswahl, da wir bei der Auswahl des Gewinners auch den Punktestand und den Punktestand aktualisieren werden, ist auch eine Statusvariable. Wir werden in einer Endlosschleife enden, in der wir erneut gerendert werden. Im Grunde müssen wir diesen hier entfernen und ihn in einen hier entfernen und ihn in Use-Effect-Hook einfügen, der überwacht, wann neue Werte für Blau und Rot erschienen sind. Okay, eine letzte Sache, die Sie beachten sollten , ist, dass Sie, wenn Sie die Punktzahl aktualisieren, immer auf der Grundlage des vorherigen Werts aktualisieren sollten Punktzahl immer auf der Grundlage des vorherigen Werts aktualisieren sollten. Wir sollten so etwas im vorherigen und vorherigen Zustand plus eins haben. Schließlich können Sie alles, was wir hier haben, in eine Scoreboard-Komponente extrahieren alles, was wir hier haben, in , nachdem Sie versucht haben, diese Funktionen selbst zu erstellen. Schauen Sie sich auch die Lösung an und sehen Sie, wie sie gelaufen ist, miteinander vergleichen Und gehen Sie auch nicht wieder auf diese Funktionen zurück. Lassen Sie Ihrer Fantasie freien Lauf und versuchen Sie, hier alle Arten von Funktionen hinzuzufügen. Aber es ist sehr wichtig, den Prozess zu genießen. Viel Spaß und viel Spaß beim Codieren. 17. Schlussbemerkung: Wir haben mit unserem Beispiel viel erreicht , als wir bei Null angefangen haben. Wir haben ein voll funktionsfähiges React-Minispiel entwickelt. Während wir das getan haben, haben wir auch Dinge gesehen, wie man ein React-Projekt von Grund auf neu bootet Aber auch, wie wir Komponenten und Requisiten definieren können Komponenten und Requisiten definieren Wir haben auch gesehen, wie man den Status, den Reaktionszustand, verwendet , um die Komponenten UY zu aktualisieren Aber es ist auch sehr wichtig, wie wir einen Status auf der Grundlage des vorherigen Werts des Zustands aktualisieren können . In Zukunft haben wir gesehen, wie man beide grundlegenden CSS-Stile verwendet, aber auch Inline-Stile , damit unsere Anwendungen gut aussehen. Wir haben auch gesehen, wie man den Use-Effect-Hook , um die Werte zu überwachen und Aktualisierungen auszulösen. Sehr wichtig ist auch, wie man die Bereinigungsfunktion des Use-Effekts verwendet um Fehler als Ergänzung zu den Zustandsvariablen zu vermeiden . Wir haben gesehen, wie man das F verwendet , um persistente Werte zwischen Renderings beizubehalten , und auch, wie man Dinge wie Kontextanbieter einrichtet, um Daten zwischen Komponenten auszutauschen und vieles mehr Ich hoffe, dieser Kurs wurde für Sie als nützlich empfunden und Sie haben neue Dinge gelernt Herzlichen Glückwunsch zum Abschluss des Kurses und vielen Dank für Ihre Zeit. Denken Sie daran, dass Sie auch das Haupthandbuch für diesen Kurs lesen das Haupthandbuch für diesen Kurs Und wenn Sie Fragen haben, zögern Sie nicht, mir eine E-Mail an Daniel Gongcraft zu schreiben Daniel Gongcraft Denken Sie daran, dass Sie von Zeit zu Zeit auch meine Website besuchen können, auf der ich regelmäßig neue Artikel veröffentliche um Ihr Webcoding-Handwerk zu verbessern Ich wünsche dir alles Gute und mache weiter mit deinen Freunden beim Programmieren. Tschüss.