Apprendre React en créant un jeu (édition 2024) | Daniel Nastase | Skillshare
Recherche

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

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 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.

36

Teilnehmer:innen

--

Projekte

À propos de ce cours

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

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. Bande-annonce du cours: Bonjour à tous, et bienvenue sur Discourse. L'objectif de ce cours Reactjs est de vous présenter les outils et les concepts nécessaires pour commencer à créer de véritables applications Web Je suis Daniel et je serai votre instructeur. Je fais du développement Web depuis plus de 18 ans, dans de grandes et petites organisations, et j'aime toujours ça. Vous pouvez en savoir plus sur moi sur mon site web, GSCRAFTO. J'ai commencé à apprendre à coder en essayant de créer mes propres jeux vidéo. C'est la raison pour laquelle je pense qu' apprendre doit être amusant et avoir la même sensation que lorsque vous étiez enfant lorsque vous jouiez et découvriez de nouvelles choses. À la fin de ce cours, nous développerons le jeu suivant en utilisant VGS. Ce sera un jeu de ciseaux à papier pour chaque joueur, le jeu choisira un signe aléatoire et décidera également du gagnant. Lors de la création de ce jeu, nous passerons en revue diverses photos des meilleures pratiques en matière de réaction et expliquerons comment éviter les pièges courants Le cours est également accompagné ce joli manuel imprimable que vous pourrez utiliser ultérieurement pour vous y référer facilement En suivant le contenu des vidéos ici, il y a plus de 35 pages complètes avec du code, exemples, des ressources ou des diagrammes, afin que vous puissiez obtenir une meilleure représentation visuelle de ce qui se passe. J'ai beaucoup travaillé sur celui-ci, j'espère qu'il sera utile. Commençons à suivre les cours. 2. Introduction du cours: Avant de commencer à coder, nous aimerions exposer quelques points. Tout d'abord, comment utiliser ce cours. Les informations contenues dans le discours sont assez denses pour obtenir les meilleurs résultats. Je vous conseille de suivre ce cours deux fois. La première fois, obtenez un aperçu général du cours, et la deuxième fois, faites l'exercice proprement dit. Chaque chapitre est accompagné d'un fichier de début et de fin qui facilitera le suivi du contenu. Je vous recommande de coder manuellement car cela facilitera la mémorisation. Dans ce cours, j' utiliserai VS Code et Google Chrome car ce sont mes principaux outils de prédilection, mais vous pouvez utiliser n'importe quel autre identifiant ou navigateur avec lequel vous êtes à l'aise. De plus, nous avons une configuration très minimale. Aucun travail de configuration n'est nécessaire, aucun module NPM. En fait, vous pouvez simplement consulter la source et vous obtiendrez le code qui s'exécute dans le navigateur, les connaissances requises. D'un point de vue réel, il s'agit d'un cours adapté aux débutants. Mais si vous ne savez rien à propos de React, il peut être judicieux de suivre mon autre cours pour débutants sur React que j'ai ici. Vous êtes censé en savoir un peu plus sur des sujets tels que le composant ou le fonctionnement d'une variable d'état de réaction. Considérez-le comme un cours qui vous fournit un modèle de réflexion sur la façon de créer de vraies applications. Nous verrons les meilleures pratiques, nous créerons des bogues et nous verrons également comment les corriger. Extraits de code. Personnellement, je n' aime pas les longs cours. Je crois que je n'ai jamais terminé un cours de plus de 2 heures. Afin de réduire le temps de ce cours, j'ai défini de nombreux extraits de code tels que celui-ci Vous pouvez tous les voir ici dans le dossier VS code où j' ai tous les extraits de code que j'utilise pendant le cours La raison pour laquelle je définis tous ces extraits de code est qu' il m'est assez difficile de parler dans une langue étrangère et d'écrire du code en même temps Mais je veux aussi vous faire gagner du temps lorsque vous ne faites que me regarder, comment je tape des choses dans l'éditeur de code. Ceci étant dit, passons à notre première leçon où nous utiliserons react, render et react to root pour créer l'échafaudage 3. Rendre l'application avec ReactDom createRoot: Jetons un coup d'œil à ce que nous avons dans le modèle de discours de départ. Il existe ces importations simples. Ici, nous importons simplement Reactome et Babel comme nous l'avons fait par le passé en janvier Ici, nous avons également un bloc de script qui est en texte. Babble n'est pas Javascript, c'est du texte Babble Et la raison en est que nous aurons besoin de babble et de cette importation pour pouvoir écrire X dans notre code A. J'ai créé cette configuration dans l'idée de ne pas trop compliquer les choses, ne pas commencer par des modules MPM, des serveurs Web, des outils ou des choses Pour l'instant, nous n'avons que ce simple fichier HTML d' index simple. Écrivons maintenant notre premier composant de réaction. Ce composant de réaction s'appellera app. En général, l'application est le point d'entrée de toute application React. Je vais écrire ici une application constante. Cette application est une fonction simple qui renverra quelque chose comme «   bonjour » depuis l'application React. Au fait, ce que vous voyez ici est x. Cela sera interprété par Babble et sera traduit en Javascript simple À ce stade, si je sauvegarde et actualise la page, rien ne se passera. D'ailleurs, nous avons créé ce div avec l'idée de root, celui-ci servira conteneur principal pour notre React Ap. Maintenant, étant donné que nous voulons insérer le React Ap dans cette plongée, la première chose que je dois faire est de venir ici et d'écrire une nouvelle variable nommée container. Ce conteneur sera égal à l' élément document get by ID root. Je vais cibler ce dé. Ensuite, je vais devoir créer une nouvelle racine. Pour cela, j'écrirai const root. Celui-ci est égal à React Create Root. Je vais lui donner en paramètre le conteneur que je viens de créer dans la ligne précédente. Enfin, j'ajouterai une nouvelle ligne où je dirai route Render App Render à l'intérieur de cette route, cette application à partir d'ici. Si je dois enregistrer et rafraîchir la page, nous verrons que nous avons maintenant ce gentil bonjour de la part de Reactapp Le contenu qui se trouvait auparavant dans la route ID a maintenant été remplacé par le contenu de notre React, parlant de ce rendu root. Cela a déjà été introduit dans les nouvelles versions de React. C'était une autre syntaxe, mais celle-ci s'accompagne de quelques améliorations de performances. J'ajouterai dans le manuel de ce cours le lien vers un article qui indique certaines des mises à jour introduites dans le rendu root. Cool. Nous avons fait de notre premier un composant. Ensuite, nous verrons comment créer les composants nécessaires pour créer le jeu lui-même. 4. Échafaudage des principaux composants: Maintenant que nous avons créé notre application Act principale, examinons de nouveau l'architecture de nos composants. Voici à quoi ressemblera le jeu à la fin. Comme nous pouvons le voir ici, nous avons trois types de composants. Tout d'abord, il y a le volet joueur. Ce composant comporte deux instances, l'une pour le joueur rouge et l' autre pour le joueur bleu. Il y a aussi ce tableau de résultats qui indiquera qui a gagné la partie. Enfin, il y a le composant du jeu qui inclura tout cela. Allons maintenant fabriquer l' échafaudage pour tous ces composants Je vais revenir à l'index HTML. La première chose que je vais faire est de venir ici et de créer un composant de jeu. Pour cela, je vais écrire Constant Game. C'est une fonction, une fonction de base. Comme le composant de l'application, il comportera le contenu suivant. Je vais écrire ici un dip qui ne fera que renvoyer pour le moment ce simple texte. Maintenant, dans l'application, au lieu de renvoyer ce H, je vais renvoyer une nouvelle instance du composant de jeu. Si nous voulons actualiser, nous verrons maintenant que ce que nous avons ici est le contenu que nous avons déclaré dans le composant du jeu. Mais cela ne suffit pas. Si je dois revenir ici, nous verrons qu'à l'intérieur du composant du jeu, il y a des joueurs et aussi ce plateau Resu Allons-y et créons ces deux-là également. Ensuite, je vais créer le composant joueur. Celui-ci sera nommé joueur. Ce sera une fonction qui renverra quelque chose comme ça, juste un texte simple. Enfin, il y a aussi le composant du tableau de résultats qui sera également une fonction. À l'intérieur de cette fonction, je dirai qu'il n'y a pas encore de résultats. Parce que dans le tableau des résultats, nous devrons montrer qui a gagné la partie. Passons au composant du jeu ici, créons toute cette arche de composants. Tout d'abord, j'aurai besoin deux instances du type player. Ce que je vais faire ici, c'est créer une instance et la seconde pour l'autre joueur. Ensuite, j'ajouterai également ce tableau de résultats que nous avons créé. Si nous jetons un dernier coup d'œil ici, nous verrons que nous avons également besoin de ce bouton de démarrage du jeu. Je vais revenir ici. Ici, je vais juste écrire un simple bouton HTML. Celui-ci n'est pas un composant, c'est juste un simple élément HTML. Je vais économiser. Et maintenant, si nous allons actualiser, nous voyons que nous avons deux composants pour joueurs, le bouton et enfin le mot résultat. Mais pour l'instant, les composants de nos joueurs sont exactement les mêmes, ils contiennent juste ce texte standard. Dans la leçon suivante, nous verrons comment personnaliser ces composants à l'aide d'accessoires. Et aussi comment nous apprendrons à nos composants à choisir un élément aléatoire entre de la pierre, du papier ou des ciseaux. 5. Ajouter des accessoires: Maintenant que l'échafaudage des composants est prêt, examinons notre Encore une fois, vous verrez qu' un composant du joueur est rouge et l'autre est bleu. Et des symboles Ramble leur sont également attribués. Dans notre état actuel, les deux composants ont exactement la même apparence. Il s'agit simplement d'un div avec un texte standard. Ce que je veux faire avec vous dans les deux prochaines leçons, c'est d'abord attribuer des paramètres à ces composants pour savoir que celui-ci est rouge et l'autre est bleu. Dans la leçon suivante, nous verrons également comment commencer par dessiner des éléments aléatoires pour ces composants. Commençons par les paramètres des composants. La première chose à faire est de venir ici dans la déclaration des composants et de leur attribuer une couleur. Ici, je dirais que je veux une couleur bleue pour ce joueur. Ensuite, je dirai que je veux une couleur rouge. C'est ainsi que nous envoyons un paramètre cette valeur au composant lui-même. Pour les lire, je vais devoir ajouter ici un nouveau paramètre props Il s'agit d'un paramètre par défaut que chaque composant de fonction peut recevoir ici. Ce que nous pouvons faire, c'est simplement lire la valeur du paramètre que nous envoyons. Nous pouvons donc voir ici des accessoires de cette couleur, disons que lorsque nous actualiserons, nous verrons ici que nous avons composante de couleur bleue et l'autre est rouge Mais nous pouvons faire un pas en avant. Nous pouvons tirer parti des instructions de structuration Javaskip. Ce que je peux faire ici, c'est venir ajouter la déclaration de restructuration du Colo. Au lieu d'avoir ici des accessoires de cette couleur, je peux simplement dire que maintenant je veux la couleur et que les choses fonctionneront exactement comme avant Mais on peut même faire un pas en avant et faire toute la déstructuration directement dans la déclaration de la fonction Ce que je veux dire ici, c'est que nous allons obtenir un objet en paramètre et faire une structuration directe directement à partir d'ici Si nous enregistrons et actualisons, vous verrez que tout est comme avant. Mais maintenant, le code est un peu plus clair. Voyons dans la leçon suivante comment nous pouvons tirer des éléments aléatoires pour cette carte de joueur. 6. Signes aléatoires: Nous avons maintenant les paramètres de couleur envoyés aux composants. C'est plutôt cool car nous pouvons utiliser ces couleurs pour rendre un composant du joueur rouge et l'autre bleu. Mais ce que nous n'avons pas encore abordé , ce sont ces éléments aléatoires. À la fin de la leçon, ce que je veux faire, c'est être capable d'extraire des éléments aléatoires. Pour l'instant, il n'y aura que des chaînes et les affichera dans les composants comme nous le faisons ici. Revenons à notre exemple ici. Je vais d'abord ajouter le commentaire pour savoir ce que nous faisons ici. Et je définirai une nouvelle constante, les principaux signes. Cette constante ne sera qu'un simple tableau contenant des chaînes de caractères. Chaque chaîne représentera une valeur possible pour les signes, pierre, le papier ou les ciseaux de ce tableau. Maintenant, je peux revenir dans le composant joueur. Je vais ajouter un autre commentaire, disant que nous générons un index aléatoire pour choisir un signe aléatoire. Il s'agira d'une nouvelle constante nommée random index. Cet indice aléatoire sera une fonction mathématique. Il renverra des valeurs aléatoires 0 à 2 Avec cet indice aléatoire créé, nous pouvons maintenant créer une autre constante nommée signe aléatoire L aléatoire Donnons-lui un nom. Ce signe aléatoire sera le signe d'un indice aléatoire. Maintenant que j'ai ce signe aléatoire, je peux venir ici et remplacer tout le nom, tout le contenu de la carte du joueur par ce tableau. Cela signifie que ce qui provient des couleurs choisit et c'est ce que nous avons généré ici. En fait, je l'ai renommé Random Sign. OK, maintenant, si nous actualisons, vous verrez que le joueur bleu choisit le papier tandis que le joueur rouge choisit la pierre. Ensuite, je vais actualiser à nouveau, actualiser à nouveau, et ainsi de suite. Vous verrez qu'à chaque actualisation, un nouveau signe aléatoire est sélectionné pour un joueur donné. 7. Styles CSS dans React: Dans l'état actuel des choses, notre application semble assez ennuyeuse. Venons-y ajouter quelques styles CSS. Pour cela, je vais devoir créer un nouveau fichier. Ce fichier sera nommé Styles that CSS. Ici, je vais coller les styles CSS nécessaires. Eh bien, ce n'est pas un cours sur le CSS. Vous pouvez jeter un œil à ces déclarations et vous verrez que beaucoup d'entre elles sont assez explicites, comme définir un Carlo en arrière-plan, aligner le texte, etc. Maintenant que nous avons créé ce fichier CSS, lions-le à notre fichier de réaction principal ici. Le fait que je souhaite importer une nouvelle feuille de style, et celle-ci provient de styles CSS. Maintenant, si nous actualisons, nous verrons que nous avons déjà commencé à avoir des styles de base dans notre application. Nous avons l'arrière-plan, la couleur du texte est différente, l'alignement, etc. Mais aucun style n'est encore appliqué ici, par exemple aux composants du lecteur. Pour cela, je vais devoir faire le lien, par exemple, la classe player et la classe container avec ces dips que nous avons dans notre application React Je vais devoir ajouter un nom de classe ici. Je dirais que je veux un nom de classe pour le joueur. Et ici, dans l'autre, lorsque nous aurons le conteneur principal pour le joueur x, j'ajouterai le nom de classe du conteneur. Dans des conditions normales, il s'agira simplement d'une classe égale à un conteneur ou d'une classe à un joueur. Mais étant donné que la classe fonctionne déjà, la réserve fonctionne en Javascript, nous devons ajouter ce nom de classe à celui-ci. Revenons et donnons du frais. Nous allons voir maintenant que nous avons ces deux éléments à l' écran et qu'ils sont plutôt jolis. Je vais revenir à 100 % du navigateur, mais il y a une chose qui manque. Allons jeter un autre coup d'œil au dernier exemple. Je vais ouvrir notre design final. Vous verrez ici que le panneau s'est inversé. Celui-ci pointe vers la droite et celui-ci vers la gauche. Ce que nous pouvons faire ici, c'est entrer dans le CSS et ajouter une autre règle. Je dirais que je veux le deuxième enfant du type joueur soit transformé. Au fait, ce que j'ai fait ici est une imbrication CSS native. J'ajouterai dans le manuel de ce cours un lien où vous pourrez en savoir plus à ce sujet. Mais ce qui est bien ici, c'est qu' après avoir ajouté cette règle, vous verrez maintenant que ce texte est maintenant essentiellement inversé Laissez-moi ouvrir un autre dossier. Cette règle que nous avons ajoutée ici, cette transformation de Scalix moins un de retourner la deuxième carte du joueur Lorsque j'y ajouterai un vrai panneau, il pointera vers l'autre côté. 8. Définition de styles en ligne: Nous avons mis en place quelques styles de base, mais il reste encore de la place. Par exemple, nous n' avons pas de couleur d'arrière-plan pour ces objets et nous n'avons pas non plus d'image pour les panneaux tels que de la pierre, du papier ou des ciseaux. C'est ce que nous voulons faire dans cette leçon. Commençons par la couleur de fond. Si nous regardons à quoi ressemblent les choses en ce moment, nous avons ce paramètre de couleur qui entre dans le composant. Ce paramètre de couleur peut être utilisé comme couleur de fond, car ici nous aurons du rouge ou du bleu. C'est exactement ce que nous voulons mettre comme toile de fond ici. Pour cela, je vais utiliser le style en ligne afin de définir ce style en ligne Ici, style equal celui-ci reçoit en paramètre un objet script Java complet. Je voudrais dire que le colog d'arrière-plan doit être exactement la valeur du paramètre que nous recevons ici Ce sera la couleur de fond et elle sera égale à un coloque Rafraîchissons maintenant. Nous voyons que nous avons les cartes du joueur avec la couleur de fond voulue. Cet objet intégré deviendra, avec le temps, de plus en plus complexe Une bonne idée est de venir ici et de l'extraire en tant qu'objet distinct ici, notre bon style en ligne, ce style en ligne sera exactement ce que nous avons Je transmettrai cet objet directement au style intégré. Les choses ressembleront exactement à ce qu'elles étaient avant, mais nous avons ce bel objet isolé auquel nous pouvons ajouter d'autres valeurs plus tard. Parlons maintenant un peu des images qui seront placées à l'intérieur des cartes du joueur. Au lieu d'avoir ici une pierre ou des ciseaux. Nous aurons des images réelles pour cela. J'ai déjà préparé quelques ressources et je vais les partager avec vous. Maintenant, je viens de mettre les PNG sur mon site web. Je vais ouvrir ces images, vous verrez qu'elles sont exactement pour le rocher, une pour le papier et l' autre pour les ciseaux. Étant donné que nous utilisons des fichiers PNG, nous pouvons également avoir des arrière-plans transparents Et si nous examinons de plus près le format de l'URL, ce que nous avons là, c'est quelque chose comme ça. D'accord ? C'est l'adresse du site Web. Mais ici, nous pouvons remplacer ce modèle par ce signe aléatoire. Grâce à ce signe aléatoire, nous aurons les valeurs de la pierre, du papier ou des ciseaux. Allons-y et faisons-le. Je vais venir créer une nouvelle constante. Et cette constante sera égale à cette URL complète. Et après ce signe aléatoire, ce PNG, c'est plutôt sympa parce que je peux venir ici maintenant et pour le style en ligne, ajouter cette image de fond Revenons en arrière et actualisons-nous. Nous allons voir maintenant que ces images sont placées dans nos composants, et qu'il nous reste effectivement un peu de texte. Je peux donc maintenant venir le supprimer car nous n'en avons plus besoin. Voyons le dernier exemple en action. Ça a l'air plutôt sympa. Par exemple, chaque fois que je vais actualiser, vous verrez que de nouveaux signes sont dessinés pour chaque joueur. Enfin, n' oubliez pas que nous avons tout cela dans les styles présentés ici pour les cartes de joueur . Nous avons la répétition de l'arrière-plan, la taille de l' arrière-plan, l'origine de l'arrière-plan, etc. Et en fait, ce sont les règles CSS qui nous permettent donner à ces images une belle apparence à l'intérieur de la carte de joueur. C'est ça. Passons à la leçon suivante. Nous verrons comment ajouter cette jolie animation lorsque nous appuierons sur le bouton de démarrage du jeu. 9. Le crochet useState(): Maintenant que les styles intégrés sont configurés, examinons de nouveau la version finale de notre exemple Notre jeu part d' un état vide. Vous pouvez voir maintenant que chaque joueur a un état vide. Aucun signe n'a encore été dessiné pour un joueur. n'est que lorsque j'appuie sur ce bouton de jeu de style que l' animation de shuffling démarre et que chaque joueur obtient un signe aléatoire À l' heure actuelle, nos joueurs, chacun d'entre eux, commence déjà avec un signe donné. Et la raison en est que lorsque nous commençons avec un style intégré, nous définirons cette image d'arrière-plan fonction du signe aléatoire généré dès la sortie de la boîte C'est quelque chose que nous voulons changer. Mais plus encore, ce que nous voulons changer ici, c'est le fait que je veux que le jeu démarre lorsque j' appuie sur ce bouton. Si nous examinons le diagramme de flux de données, ce que nous voulons faire à partir de là , ce sont les deux parties. Lorsque nous appuyons sur le bouton Start Gate pour envoyer un événement à chaque composant joueur. Voyons comment nous pouvons le faire. Tout d'abord, ce que nous devons faire, c'est changer la façon dont les choses se passent ici. Au lieu de générer ce signe aléatoire à chaque fois que le composant est rendu, nous voulons extraire le design dans une variable d'état. Nous voulons donc utiliser un crochet à état U. Dans des conditions normales, vous importerez un état U, vous direz donc importer l'état U depuis React. Mais étant donné que nous n'utilisons pas de serveur Web, nous avons cette configuration très minimale. Nous devrons apporter une légère modification ici. Et j'importerai l'état U comme so const et j' appliquerai l' instruction de déstructuration en Javascript à la réaction Mais gardez à l'esprit que si vous utilisez une application de recréation, vous devrez l'importer telle qu'elle est ici. Maintenant que l'état U correctement importé, je vais venir ici. Dans le composant player, je vais définir la nouvelle variable d'état créée à l'aide de cet état U et ce sera sin et set sign. C'est normal de commencer par une variable Neal, car nous voulons ici démarrer les composants du lecteur sans avoir sélectionné quelque chose Cette variable d'état définie remplacera ce signe aléatoire que nous avons ici. De plus, nous pouvons extraire tout ce qui se trouve ici, toute la génération aléatoire Nous voulons l' extraire dans une fonction. Nous devrions pouvoir appeler cette fonction. Lorsque nous appuierons sur le bouton, je remplacerai tout ce que nous avons ici par cette fonction. Si vous jetez un œil, cette fonction pick random sin contient exactement les mêmes lignes qu'auparavant. Seulement, à la fin, nous avons défini le signe aléatoire dans cette variable d'état de signe défini et tout est enveloppé dans une fonction agréable. Maintenant, une chose que nous devons comprendre est de savoir comment faire pour que cette fonction de sélection de signes aléatoires soit liée au bouton. Comment pouvons-nous faire en sorte que lorsque nous appuyons sur ce bouton Démarrer le jeu, cette fonction soit appelée. Je vous laisse le soin de faire vos devoirs. Essayez de le faire avant de commencer la vidéo suivante. Je pense qu'il existe plusieurs façons de le faire, mais si vous le souhaitez comme conseil, vous devriez essayer d'utiliser le hook user fa. 10. Événements déclencheurs dans le wip sur les composants pour enfants: Comment avez-vous pu trouver une solution à ce problème ? Lorsque nous appuyons sur le bouton Démarrer le jeu pour envoyer des événements à ces composants A afin que de nouveaux signes aléatoires soient sélectionnés. Il existe plusieurs moyens de résoudre ce problème. Voyons un plan pour ce que nous voulons faire. abord, depuis le composant jeu, nous allons transmettre un nouveau paramètre nommé heure de début au composant joueur. À l'intérieur du composant joueur, nous surveillerons l'heure de début via le crochet d'effet d'utilisation. Lorsque cette heure de début sera modifiée , nous appellerons la méthode pick random sign. Enfin, dans le composant jeu, nous mettrons à jour l'heure de début lorsque le bouton est enfoncé. Voyons tout cela en action. Tout d'abord, je vais entrer dans le volet jeu. Ici, je vais créer une nouvelle variable d'état. Comme nous l'avons dit, celle-ci s'appellera heure de début. Il dispose également de cette fonction de réglage de l'heure de début. Il partira de la valeur nulle, étant donné que vous ne voulez pas aucun signe aléatoire soit détecté au début. Maintenant que cette heure de début est atteinte, je vais passer ici dans les deux composants du joueur. Je vais envoyer le paramètre de l' heure de début. Je l'enverrai pour le premier composant, puis je l'enverrai également au composant suivant. Ce paramètre d'heure de début doit être mis à jour à un moment donné. Pour cela, je vais créer une nouvelle fonction. Cette fonction sera une constante nommée start game. Ce jeu ressemblera à cela, il fixera donc l'heure de début à la date. Nous allons maintenant choisir la date et l'heure actuelles du navigateur, et nous le mettrons à jour chaque fois que quelqu'un appuiera sur le bouton de démarrage du jeu. Enfin, nous utiliserons la fonction onclick. Lorsque quelqu'un appuie sur le bouton, nous lançons le jeu. Maintenant que nous savons que les composants du joueur auront ce nouveau paramètre d'heure de début, je vais le déclarer ici et laisser entrer dans les paramètres du composant. Nous devrons regarder quand cette heure de début sera modifiée. Pour cela, nous devons importer le hook use effect. Je vais revenir ici et j' appellerai également l'effet. N'oubliez pas que si nous avions un webs normal, vous devrez l' importer d'ici Importez-le directement depuis React. Étant donné que cela est maintenant créé, ajoutons le hook d' effet d'utilisation à l'intérieur du composant player à l'intérieur de celui-ci. Nous allons faire ce qui suit. Nous allons vérifier s'il y a une heure de début. N'oubliez pas qu'au départ, cette heure de début est nulle. Si nous modifiions l'heure de début, nous appellerons le signe « pick random ». N'oubliez pas comment fonctionne l'effet d'utilisation. L'effet obtient, sous forme de paramètre, un tableau de valeurs. Chaque fois que ces valeurs sont modifiées, la fonction incluse dans l'effet d'utilisation est déclenchée. Voyons voir, maintenant c'est en action. Je vais actualiser maintenant. Au départ, nous n'aurons aucune valeur dans les composants du joueur, mais si nous appuyons sur le bouton de démarrage du jeu, nous aurons d'abord des éléments aléatoires tirés au sort par la suite. Plus et ainsi de suite. En gros, nous avons trouvé un moyen de démarrer le jeu lorsque nous appuyons sur ce bouton. Plutôt cool. Dans le chapitre suivant, j' ajouterai également cette animation de brassage lorsque vous appuyez sur ce bouton 11. Animations et setInterval: Regardons encore une fois le dernier exemple. Lorsque nous appuyons sur le bouton, vous verrez que cette animation s' exécute chaque fois qu' un signe aléatoire est dessiné. Comment pouvons-nous implémenter cela dans notre exemple ? Parce que pour le moment, il suffit d'appuyer sur le jeu des étoiles et nous avons directement les éléments dessinés, mais aucune animation. Encore une fois, ici, il existe plusieurs façons de le faire. Il existe également une solution purement CSS que nous pouvons appliquer. Mais encore une fois, nous serons la solution qui nous permettra de jouer avec certains mécanismes ou de réagir et voir comment éviter certains bugs. Essayons-le. Ce que nous allons faire ici, c'est utiliser cette fonction d'intervalle défini. Il s'agit d'une fonction Javaski, qui ne dépend pas de React En gros, cette fonction fait, c'est que je l'appellerai transmettre une fonction qui sera exécutée pour chaque retard. En gros, disons que je veux exécuter du code chaque seconde, je vais en mettre 1 000 car cela fait 1 million de secondes. Et puis ce code sera exécuté chaque seconde lorsque le cycle sera terminé, lorsque je n'aurai plus besoin de ce code pour être exécuté, je devrai appeler cette fonction intégrale claire. Voyons donc comment implémenter cela dans notre exemple. Tout d'abord, nous devons savoir combien de fois l'animation a été exécutée. Jetons un autre coup d'œil quand nous verrons que cela dure un certain temps et qu'après cela, cela s'arrête. Cela est dû au fait que nous avons fixé une durée de 20 animations. Je vais devoir venir ici et créer une nouvelle variable d'état nommée Animation Counter. Ce compteur d' animations partira de zéro. Celui-ci indiquera combien de fois notre animation a été diffusée. Et dans le signe de sélection aléatoire, j'ajouterai la fonction set inteval Nous voulons que du code s'exécute à 100 millisecondes, dix fois par Ce code est exactement celui-ci qui trouvait auparavant directement à la racine de la fonction. Maintenant, il sera déplacé dans la fonction intégrale définie, nous voulons choisir un nouveau signe aléatoire à 100 millisecondes Mais ce que nous voulons faire, aussi que cette animation cesse de fonctionner à un moment donné . Je vais venir ici, je vais vérifier si le compteur d'animations est supérieur à 20. Nous devons effacer l' intégrale pour arrêter l'animation. Et ce que j'ai ensuite transmis dans la fonction intégrale claire est exactement celle-ci, les références que j'ai faites ici. Une dernière chose que nous devons faire. C'est aussi pour incrémenter à un moment donné, ce cotter d'animation Chaque fois que cette intégrale s'exécute, je dirai animation conta ici Nous devrions l'augmenter d'un. Ne soyez pas tenté de faire quelque chose comme ça , car si nous le faisons ainsi, nous nous retrouverons avec quelques bugs. N'oubliez pas que l'état défini, lorsqu'il s'exécute sur des valeurs précédentes, nous devons l'appeler ainsi. Il sera appelé via une fonction qui aura accès à la valeur précédente et nous incrémenterons cette valeur plus un OK, Dock, maintenant nous allons l'exécuter. Appuyons sur le bouton de démarrage du jeu. Vous verrez que l' animation est opérationnelle, ce qui est plutôt cool. Je vais recharger la page pour le moment. Si vous jouez avec cet exemple, vous verrez qu'il y a deux bogues pour la leçon suivante avant de commencer. Tout d'abord, essayez de trouver quels sont les bogues, les deux cas, et essayez-le. Essaie de les réparer. On se voit dans la prochaine leçon alors. 12. Ajouter useRef() et useEffect(nettoyage: Nous avons terminé la dernière leçon avec quelques bogues dans notre code. Je vous ai laissé comme devoir, l'idée d'essayer de trouver ces bugs et de les corriger. Tout d'abord, voyons ce qu'ils sont. Il y a deux bogues principaux dans notre code, et j'ai créé cette image pour qu'ils puissent les montrer. Tout d'abord, lorsque nous démarrons l'animation, vous verrez qu'elle s'exécute indéfiniment. Cela ne s'arrête pas après 20 descentes, même si nous avons ici une condition très claire selon laquelle si une rencontre est supérieure à 20, nous devons nous arrêter. C'est le premier bogue et peut-être aussi le plus important si nous démarrons l'animation. Ensuite, j'avance rapidement, j'appuie sur ce bouton, vous verrez que l'animation commence à devenir étrange. Ça va trop vite, ça devrait aussi être le cas, ça ne s'arrête pas. Enfin, il existe également un troisième bogue qui est le plus facile à corriger. Vous verrez que si nous allons maintenant dans l'image contenue dans le fichier, vous verrez que nous avons cette valeur nulle, ce fichier PNG, le fait que notre fichier essaie de récupérer cette valeur nulle, ce fichier PNG. Commençons par ce fruit facile à portée de main. Essayons d'abord de corriger cette erreur qui apparaît dans la console. La raison en est en fait cette ligne, l'image de fond. Ce que nous faisons ici, c'est que nous essayons de récupérer l'image sur le site merdique de JS, et nous avons ici le panneau Au départ, vous pouvez voir que ce signe commence par une valeur nulle. C'est la raison pour laquelle nous obtenons cette erreur, car ici, nous essayons de récupérer les actifs, peu importe. Après cela, ce PNG, une solution assez simple à celui-ci sera de tester si le signe existe. Si le signe existe, essayez de récupérer l'image Sinon, ne faites rien, récupérez simplement ici une chaîne vide. Actualisons-le et vous verrez maintenant que l'erreur n'est pas présente dans la console. Il s'agit du premier bogue. Passons maintenant à la plus complexe. Le fait que lorsque nous démarrons l'animation, nous n'obtenons aucune erreur, mais l'animation s'exécute indéfiniment, même si cette condition est présente ici. Cela se produit parce que cette partie est comme si l'état défini dans React n'était pas synchrone. Lorsque nous essaierons d' exécuter cette condition, ne sera pas encore mise à jour. Par exemple, si je joue une rencontre sur console , que je rafraîchis et que je démarre le jeu, vous verrez que c'est zéro pour toujours Et la raison en est qu'il n'a pas eu l'occasion de faire la mise à jour complète. Une façon de résoudre ce problème consiste à tout encapsuler dans la fonction de compteur setanym et utiliser cette valeur précédente comme référence. Par exemple, j' ai créé cet exemple dans le manuel du cours . Ce que nous pouvons faire, c'est mettre ici un gros emballage et mettre tout le code à l'intérieur du comptoir. Et nous saurons maintenant avec certitude que la valeur de l'état est mise à jour et qu' elle possède la bonne valeur. Mais ce n'est pas génial car il existe en fait l'intégrale de la fonction pick rand, un état défini, c'est un peu trop. Une autre chose que nous pouvons essayer de faire est d'utiliser des références. Il est agréable de travailler avec les références en plus de les utiliser dans React. Les formulaires sont également parfaits pour stocker valeurs qui sont conservées entre les rendus mais qui n' ont pas besoin d'être affichées sur l'UY lui-même. Ce que je dois faire ici, c'est remplacer ce compteur, n'importe quel compteur par n'importe quelle contre-référence. Étant donné que nous voulons utiliser ce travail, étant donné que F est en fait une référence, je devrai l'importer à partir de la valeur réelle de la référence enregistrée dans le champ actuel de la référence. Ce que nous devons faire ici, c'est lorsque nous démarrons l'animation, c'est prendre ce compteur et dire que le courant est égal à zéro. Après cela, au lieu d'utiliser la variable d'état définie, je le ferai. Revenez à la référence et dites que je veux l' augmenter d'une unité. Enfin, ici, je peux simplement utiliser celle-ci au lieu de l' ancienne variable d'état. Voyons comment ça se passe. Je reviendrai me rafraîchir après cela. Si nous appuyons sur Démarrer le jeu. L'animation s'arrête maintenant après 20 itérations. Actualisons à nouveau et redémarrons le jeu. Et l'animation est maintenant arrêtée après 20 sorties , ce qui est génial. Nous avons corrigé un autre bogue. Enfin, résolvons le dernier bogue. Je vais maintenant revenir à l'exemple, je vais commencer à appuyer très vite sur le bouton de démarrage du jeu. Vous verrez que l'animation va bien trop vite, qu'elle devrait le faire, il y a deux manières en fait. Il existe plusieurs moyens, mais deux principaux moyens de résoudre ce problème. Une façon de le faire est d'utiliser une autre variable d'état et de désactiver ce bouton pendant que l'animation s'exécute, ce qui est normal. Mais passons à un autre sujet, nous réagissons et il s'agit de la fonction use effect clean up. En gros, ce qui se passe lorsque nous appuyons très vite sur ce bouton, le paramètre de l'heure de début est modifié. Nous appelons cette fonction de signe aléatoire plusieurs fois. En fait, nous faisons plusieurs intervalles qui s'exécutent et changent de signe très rapidement. C'est la raison pour laquelle l' animation agit ainsi. Une chose que nous pouvons faire est d' utiliser la fonction de nettoyage de l'effet. L'effet a une fonction dont nous avons juste besoin pour renvoyer une fonction donnée, comme. Donc, cette fonction, que j'ai ici, sera appelée chaque fois qu' un nouvel effet d'utilisation sera exécuté. C'est ainsi que nous veillons à éliminer tous les effets d'une précédente course. En fait, ce que nous voulons faire ici, c'est effacer cette intégrale. En gros, nous voulons également appeler cela ici. Nous devrions avoir quelque chose comme ça. Mais vous voyez que l'intégrale réelle est créée dans cette fonction et nous en avons besoin ici. Une autre chose que nous pouvons faire est de créer une deuxième référence, celle-ci, je vais simplement copier cette fonction ici, et je vais dire que l' intégrale O est ici. Au lieu de créer simplement une variable locale qui ne sera pas exposée à la portée de l'effet d' utilisation, je peux venir chercher cette référence. Je dirais que celui-ci est égal à une intégrale définie. Je vais me débrouiller ici. Mais maintenant, je peux aussi éclaircir ce point. En fait, étant donné qu' il ne s'agit que d'une fonction d'une ligne, je peux tout remplacer par celle-ci pour la rendre un peu plus belle. Maintenant, réexécutons l'exemple. Vous verrez qu'à chaque fois j'appuie très vite sur le bouton, l'animation fonctionne toujours comme il se doit. Chaque fois que j'appuie à nouveau sur le bouton, celui-ci est exécuté et l'intervalle actuel est effacé. C'est ainsi que nous avons pu réparer tous nos aboiements. Dans la leçon suivante, nous verrons comment utiliser l'API de contexte A pour communiquer des valeurs d' un composant à un autre. 13. Fournisseurs de conseils dans React: Maintenant que notre application est de nouveau gratuite, passons peut-être à la dernière étape avant de décider du gagnant du jeu et de terminer l'application. Cette partie concerne la manière dont nous communiquons entre les composants. Jetons un coup d'œil à notre dernier exemple. Nous avons ces deux cartes de joueur à l'intérieur. Certains signes sont tirés au hasard. l'autre côté, il y a le composant Resualboard, celui que nous avons ici qui devrait savoir ce chaque joueur a sélectionné afin de décider qui a gagné la Nous pouvons le faire en transmettant les accessoires d'un composant à l'autre, mais dans ce cas, ce sera un peu plus délicat Nous pouvons le faire, mais ce sera plus difficile. Un autre inconvénient de cette approche est le fait que nous finissons par trop forer les accessoires C'est ainsi que l'on appelle les choses lorsque nous transmettons trop de composants d' un composant à un autre. Une autre façon de résoudre ce problème et de jouer avec certaines fonctionnalités de React consiste à utiliser le contexte. Voyons à quoi cela ressemble. Ce que nous voulons faire, c'est mettre en place un contexte de réaction. Une fois que chaque joueur a choisi un signe aléatoire, il communiquera au contexte quel signe a été choisi. Ensuite, notre composant du tableau de résultats captera les deux signes du contexte Il décidera qui a gagné la partie. Vous pouvez considérer React Context comme un magasin de données général pour l'application. Je vais inclure dans le manuel de ce cours une vidéo que j'ai réalisée il y a quelque temps expliquant plus en détail le fonctionnement du contexte des actes. Mais en gros, vous pouvez l'imaginer ainsi comme un endroit général où nous pouvons placer des données auxquelles chaque composant peut accéder à partir d'une application donnée. À la fin des deux leçons, cette leçon et la suivante, nous voulons obtenir un élément du tableau de résultats qui ressemble il sache ce que le joueur rouge a choisi et ce que le joueur bleu a choisi. Voyons comment traduire tout ce discours en code. La première chose que je dois faire est de créer un contexte pour notre jeu. Celui-ci sera nommé exactement de la même manière que le contexte du jeu, le contexte du jeu est égal à celui de création du contexte. Ce contexte de création est une fonction issue de React. Si nous créons simplement un contexte, nous ne pouvons pas en faire trop car nous devons également créer un fournisseur de contexte ici. Je vais créer un fournisseur de contexte de jeu basé sur le contexte que nous avons créé ici. Nous pouvons prendre ce fournisseur que nous venons de créer, le transmettre à notre application et intégrer tout le jeu dans le fournisseur de contexte de jeu. Nous pouvons lire dans chacun de ses sous-composants ce que nous situons dans le contexte du jeu à ce stade Si je dois enregistrer le fichier et l'actualiser, vous verrez que nous avons quelques problèmes avec ce qui s'est passé ici. La raison pour laquelle le LUI a disparu est que nous sommes en train de rendre le fournisseur de contexte de jeu. Et en effet, nous nous transmettons en tant qu'enfants. Nous sommes en train de transmettre le jeu, mais ici, chez le fournisseur actuel, nous ne divulguons pas ces enfants. Il va donc falloir venir ajouter un nouveau nom de propriété. Enfants. En fait, il s'agit d'une propriété par défaut pour tout composant React. Rafraîchissons-le et vous verrez que maintenant les choses sont comme avant. Seulement, notre jeu est désormais intégré à ce fournisseur. Une chose intéressante que nous pouvons faire est de venir ajouter un état pour le fournisseur. Et cet état sera transmis à toutes les composantes de ces fournisseurs. Voyons comment nous pouvons le faire. Je vais venir ici et ajouter fournisseurs de jeux ce que nous devons contenir dans notre État. Si on y pense, ce seront les signes du joueur, qu'est-ce que le joueur rouge a sélectionné. De plus, qu'est-ce que le joueur bleu a sélectionné ? Avec cela, je peux maintenant venir ici et transmettre ces valeurs que le joueur fait pivoter et la fonction Seta Je vais le transmettre au fournisseur. À ce stade, les choses seront comme avant, il n' y aura aucune erreur dans la console, mais nous pourrons simplement lire ces valeurs dans n'importe quel sous-composant du fournisseur de contexte Nous verrons dans la leçon suivante comment mettre à jour ces valeurs et comment les lire. 14. Le crochet use, concu: À la fin de la leçon précédente, nous avons réussi à créer et à configurer ce contexte de jeu. Nous avons intégré notre jeu à ce fournisseur de contexte de jeu. Pour rappel, permettez-moi vous montrer ce que nous essayons de faire ici. Nous essayons de lire les signes détectés par ces deux cartes de joueur et de les replacer ces deux cartes de joueur dans leur contexte réel. Ensuite, nous pouvons utiliser dans le composant du tableau des résultats, les signes, afin de pouvoir décider qui a gagné la partie. Le but de cette leçon est de lire ces éléments et de les définir lorsqu'ils sont sélectionnés. Commençons par lire le contexte du jeu dans un composant. Je vais entrer dans le volet joueur. Ici, j'écrirai le contexte, le contexte, le contexte du jeu suivants. Cela signifie que nous utilisons un autre crochet. Nous devrons l'importer d'ici. Ce hook permet d'accéder à un contexte donné, dans notre cas, c'est le seul contexte dont nous disposons, le contexte du jeu. Pour rappel, nous avons défini ces deux variables d'états en fonction du contexte, les valeurs rouge et bleue pour chaque joueur. Laissez-moi enregistrer celui-ci. Je vais enregistrer le contexte. Voyons si nous avons effectivement ces deux éléments présents lors de l'utilisation de la console. Et vous pouvez voir ici ce que nous obtenons de cet objet de consologie et de ce qu'il renvoie, tout d'abord, les signes du joueur que nous avons configuré et également la fonction de définition pour cette variable d'état C'est plutôt cool car nous pouvons utiliser la fonction de sélection de signes aléatoires et définir ces deux valeurs, le rouge et le bleu. Mais avant d'y aller, nous pouvons améliorer un peu cette ligne. Au lieu de n'écrire que cela, je peux utiliser l'instruction structurante En plus du contexte du jeu, je peux dire que je souhaite récupérer la fonction définie et les signes du joueur. Étant donné que nous avons maintenant cette méthode de définition des signes des joueurs, je devrais venir ici, l' appeler et je dirais, d' accord, définissez les signes des joueurs. Mais maintenant je l'ai écrit ici dans le if, lorsque le dernier élément est dessiné. Maintenant, la question est : que dois-je écrire ici ? Et gardez à l'esprit que nous essayons ici de mettre à jour un élément. Ce que nous essayons de faire ici , c'est de mettre à jour un objet dans un état de réaction. Parce que revenons-y, retour dans le fournisseur, vous verrez que celui-ci est un objet réel. La façon de le faire est d' utiliser également une valeur précédente. Ce que nous allons faire ici, c'est répartir tous les éléments que nous avons déjà dans l'objet et simplement remplacer ce dont nous avons besoin, dans notre cas, remplacer la couleur du joueur et le signe aléatoire sélectionné Dans cet esprit, revenons maintenant au tableau de Zulus et voyons ce que nous avons dans le contexte Je vais aller ici, je vais ajouter ces deux lignes. Tout d'abord, j'extrais signes du joueur à partir du contexte Ensuite, j'ajoute un autre niveau de structuration, et celui-ci extrait exactement les valeurs bleues et rouges Laisse-moi enregistrer les deux. Je vais dire bleu. Rafraîchissons-le et commençons maintenant le jeu. Vous verrez que nous sommes partis de valeurs nulles et que nous avons fini par obtenir le papier et la pierre exactement comme nous en avons ici. C'est plutôt cool car nous pouvons maintenant compléter ce composant de boîte résolue en montrant ce que chaque joueur a dessiné En gros, cette partie vient d'ici. Je vais supprimer la console car nous n'en avons pas besoin. Tout d'abord, nous devons vérifier si les deux éléments sont définis Dans le cas où l'un de ces éléments bleu ou rouge n'est pas défini, nous ne devrions pas encore renvoyer de résultat exactement comme nous l'avons fait en ce moment. Après cela, si les deux éléments sont définis, nous pouvons écrire cette ligne. Permettez-moi de me rafraîchir. Je vais commencer le jeu dans un premier temps, il n'y a aucun résultat. Ensuite, il me dira, d'accord, ce joueur bleu a sélectionné le rock, ce joueur rouge a sélectionné le rock. Et c'est exactement ce que nous avons également ici. Nous avons décrit ici un exemple de la façon dont nous pouvons utiliser le contexte A afin envoyer facilement des valeurs d'un composant à un autre sans avoir à transmettre trop de propriétés. Passons à la dernière pièce manquante du puzzle et voyons comment nous allons désigner le gagnant. Alors, comment pouvons-nous écrire quelque chose comme ça ? Le gagnant est le joueur bleu ou le joueur rouge. 15. Décider du gagnant: La dernière pièce du puzzle sera de déterminer qui a gagné le jeu et de montrer le gagnant. D'ailleurs, dans cette leçon, nous n'allons pas introduire de nouveaux éléments de réaction, c'est juste du Java pur Nous déterminerons le gagnant dans le tableau des résultats. Pour cela, je vais créer une nouvelle fonction. Celui-ci s'appellera Win. Il nous donnera les paramètres, les valeurs rouge et bleue pour les joueurs. Après avoir créé cette fonction, nous devrons également l'appeler A dans le x renvoyé du composant. Nous allons utiliser l'algorithme suivant. Non. Pour déterminer le gagnant, nous allons vérifier s'il y a un match nul, si les symboles sont égaux. Ensuite, nous vérifierons si le rouge gagne. S'il n'y a pas de match nul et que le rouge n'a pas gagné, on peut supposer que le joueur bleu gagne. Commençons par vérifier la chose la plus simple. Pour vérifier si nous avons un match nul, il suffit de vérifier si le rouge est égal au bleu. Si nous voulons, cette chaîne vérifiant si nous sommes le joueur rouge, c'est un peu plus délicat, on dirait. Nous avons donc listé ici les trois principales conditions dans lesquelles le rouge va gagner. Ce sont les combinaisons possibles qui feront du joueur rouge un gagnant. Si l'une de ces conditions est présente, nous retournerons cette chaîne. Enfin, le plus simple où nous n'aurons même pas besoin de ne rien cocher car nous avons déjà vérifié si nous en avons un rouge est celui-ci. Le joueur bleu renverra simplement la chaîne si ce n'est pas vrai ou si ce n'est pas vrai. Voyons maintenant tout cela en action. Je vais rafraîchir. Je vais commencer le jeu, enfin, à la fin, il me montrera qui a gagné la partie et qui a effectivement raison, parce que le papier bat le rock. Passons à un autre tour. Ici, c'est pareil. Ciseaux Rock Beats. Oui, c'est ça. C'est ainsi que nous écrivons une fonction pour vérifier s'il y a un gagnant. D'ailleurs, si vous pensez que c'est un peu trop, j'ai également ajouté dans le manuel une refactorisation des dysfonctionnements. À mon avis, il semble que c'est un peu plus compact, qu'il contient moins Mais je pense que c'est un peu plus difficile à lire. Je ne sais pas, peu importe ce qui fonctionne, tu peux choisir et tout ira bien. 16. Projet de classe: Maintenant que nous avons appris toutes ces nouvelles choses, il est temps de les mettre en pratique. Nous voulons ajouter quelques nouvelles fonctionnalités à notre jeu. Tout d'abord, nous voulons avoir un panneau de suivi des scores ici. Et chaque joueur doit également avoir son propre nom. Et ces noms sont modifiables. Voyons la version finale de Home Work en action. J'appuierai sur le bouton Star Game une fois qu'une partie sera terminée, vous verrez que nous avons maintenant un compteur ici. Le bleu a une victoire et le rouge n'en a aucun. Et nous pouvons également remettre le score à zéro. Et comme nous avons ajouté ces noms, je peux maintenant aussi venir les modifier et dire, d' accord, je veux que mon nouveau nom soit Daniel et cela sera mis à jour ici. Et au lieu du processeur, je veux jouer, disons contre l'IA et le nom y sera mis à jour. En règle générale, essayez d'abord de tout faire vous-même, et si cela ne fonctionne pas, regardez la prochaine session de cette vidéo. Je vais partager avec vous quelques conseils sur la façon de créer ces nouvelles fonctionnalités à la fin si vous le souhaitez, vous pouvez également consulter la section des devoirs où vous pouvez voir le code qui nous permet de créer tout cela. À partir de maintenant, je vais partager avec vous quelques conseils pour créer ces nouvelles fonctionnalités. Gardez donc à l'esprit qu'à partir de maintenant, nous avons quelques spoilers ici Il suffit de consulter cette section uniquement si vous avez initialement essayé de jouer vous-même. Tout d'abord, je vais commencer par cette fonctionnalité en ajoutant des noms aux joueurs. Je pense que celui-ci est un peu plus facile à mettre en œuvre. Presque toutes les modifications doivent être effectuées ici, dans le composant lecteur. La première chose que je vais faire ici est d'ajouter un paramètre de joueur. Ce paramètre sera directement issu du jeu. Ensuite, avec ce paramètre de joueur, je vais créer une variable d'état du nom du joueur. Lorsque nous cliquons sur ce nom, j'utilise cette fenêtre. L'invite de fenêtre est une fonctionnalité de Javaski, et non une réaction, qui nous permet de créer des fenêtres comme celle-ci, où vous pouvez saisir le nouveau nom, que vous avez vu ici Après avoir lu la nouvelle valeur dans l'invite de fenêtre, nous devons mettre à jour l'état. Et avec cela, nous devrions compléter la nouvelle fonctionnalité. D'ailleurs, il y a aussi un bonus où nous pouvons essayer extraire tout cela dans un composant du nom du joueur, en incluant simplement le joueur, ce composant du nom du joueur. Passons maintenant à la deuxième fonctionnalité, la partie du tableau de bord. Cette partie est ici. Tout devrait figurer ici sur ce forum. C'est ici que devrait figurer le tableau de bord. Nous devrions ajouter en tant que mise en page un bouton. Cela peut être un titre ou quelque chose comme ça, mais aussi un paragraphe avec ce texte. En ajoutant celui-ci, nous allons compliquer un peu l'état du composant Resulusborg Ce que nous devrons faire ici, c'est ajouter plusieurs valeurs d'état pour le score bredé, score bleu, et aussi un gagnant actuel ou nous pouvons également ajouter un objet centralisé, nous regroupons l'état en un seul objet. Une autre chose que nous devrons faire est d'utiliser le hook use effect pour remplacer celui-ci. Nous avons ici le gagnant, étant donné que lorsque nous choisirons le gagnant, nous mettrons également à jour le score et le score, il s'agit également d'une variable d'état. Nous nous retrouverons dans une boucle infinie de rendu Re. En gros, nous devrons supprimer celui-ci d'ici et le placer dans un crochet d'effet d'utilisation qui surveillera apparition de nouvelles valeurs pour le bleu et le rouge. OK, une dernière chose que vous devez garder à l'esprit est que lorsque vous mettez à jour le score, vous devez toujours le mettre à jour en fonction de la valeur précédente. Nous devrions avoir quelque chose comme ça dans l'état précédent et précédent plus un. Enfin, vous pouvez extraire tout ce que nous avons ici dans un composant de tableau de bord après avoir essayé vous-même de créer ces fonctionnalités, vérifier la solution et voir comment elle s'est déroulée, comparer les unes aux autres Et ne vous contentez pas non plus de vous attarder uniquement sur ces fonctionnalités. Laissez libre cours à votre imagination et essayez d'ajouter toutes sortes de fonctionnalités ici. Mais il est très important de profiter du processus. Amusez-vous bien et bon codage. 17. Conclusion: nous a permis de réaliser beaucoup Notre exemple nous a permis de réaliser beaucoup de choses en partant de zéro. Nous avons créé un mini-jeu React entièrement fonctionnel. Pendant ce temps, nous avons également vu des choses telles que comment démarrer un projet React à partir de zéro Mais aussi comment nous pouvons définir les composants et les accessoires. Nous avons également vu comment utiliser l'état, l'état de réaction pour mettre à jour les composants UY. Mais il est également très important de savoir comment mettre à jour un état en fonction de la valeur précédente de l'état. l'avenir, nous avons vu comment utiliser les deux styles CSS de base, mais aussi comment utiliser des styles intégrés afin de donner une belle apparence à nos applications Nous avons également vu comment utiliser le hook use effect afin de surveiller les valeurs et de déclencher des mises à jour. est également très important de savoir comment utiliser la fonction de nettoyage de l'effet d'utilisation afin d'éviter les bogues complément des variables d'état. Nous avons vu comment utiliser le F pour conserver des valeurs persistantes entre les rendus Re et comment configurer des éléments tels que fournisseurs de contexte afin partager des données entre les composants et bien plus encore J'espère que ce cours vous a été utile et que vous avez appris de nouvelles choses. Félicitations pour avoir terminé le cours et merci pour le temps que vous nous avez accordé. N'oubliez pas que vous pouvez également consulter le manuel principal de ce cours. Et si vous avez des questions, n'hésitez pas à m' écrire un e-mail à Daniel Gongcraft pour aller N'oubliez pas que vous pouvez également consulter mon site Web où je publie régulièrement de nouveaux articles afin d'améliorer votre art du codage Web Je vous souhaite bonne chance et continuez à coder, amis. Au revoir.