Aujourd'hui, dans la traduction de la prochaine partie du cours de formation React, nous portons à votre attention la deuxième leçon sur le rendu conditionnel et un atelier sur ce sujet.

→
Partie 1: aperçu du cours, raisons de la popularité de React, ReactDOM et JSX→
Partie 2: composants fonctionnels→
Partie 3: fichiers composants, structure du projet→
Partie 4: composants parent et enfant→
Partie 5: début des travaux sur une application TODO, les bases du style→
Partie 6: sur certaines fonctionnalités du cours, JSX et JavaScript→
Partie 7: styles en ligne→
Partie 8: poursuite des travaux sur l'application TODO, familiarité avec les propriétés des composants→
Partie 9: propriétés des composants→
Partie 10: Atelier sur l'utilisation des propriétés et du style des composants→
Partie 11: génération de balisage dynamique et méthode des tableaux de cartes→
Partie 12: atelier, troisième étape de travail sur une application TODO→
Partie 13: composants basés sur les classes→
Partie 14: atelier sur les composants basés sur les classes, état des composants→
Partie 15: ateliers santé composante→
Partie 16: quatrième étape de travail sur une application TODO, gestion d'événements→
Partie 17: cinquième étape de travail sur une application TODO, modifiant l'état des composants→
Partie 18: la sixième étape de travail sur une application TODO→
Partie 19: méthodes du cycle de vie des composantsPartie 20: la première leçon de rendu conditionnel→
Partie 21: deuxième leçon et atelier sur le rendu conditionnel→
Partie 22: la septième étape des travaux sur une application TODO, téléchargement de données depuis des sources externes→
Partie 23: première leçon sur l'utilisation des formulaires→
Partie 24: Deuxième leçon sur les formulaires→
Partie 25: Atelier sur l'utilisation des formulaires→
Partie 26: architecture d'application, modèle de conteneur / composant→
Partie 27: projet de coursLeçon 37. Rendu conditionnel, partie 2
→
OriginalDans le didacticiel d'aujourd'hui sur le rendu conditionnel, nous parlerons de l'utilisation de l'opérateur logique
&&
(Et). Nous expérimenterons un projet standard créé par create-
App.js
-app, dans le fichier
App.js
dont se trouve le code suivant:
import React, {Component} from "react" class App extends Component { constructor() { super() this.state = { unreadMessages: [ "Call your mom!", "New spam email available. All links are definitely safe to click." ] } } render() { return ( <div> <h2>You have {this.state.unreadMessages.length} unread messages!</h2> </div> ) } } export default App
Maintenant, l'application regarde dans le navigateur comme indiqué ci-dessous.
Page d'application dans le navigateurVous avez peut-être déjà utilisé l'opérateur
&&
dans des constructions comme
true && false
(qui donne
false
). Pour que l'expression
true
soit renvoyée à la suite du calcul d'une telle expression, elle doit ressembler à
true && true
. Lors du traitement de telles expressions, JavaScript détermine si leur côté gauche est vrai et, dans l'affirmative, renvoie simplement ce qui se trouve dans leur côté droit. Si une expression de la forme
false && false
traitée, alors
false
sera immédiatement retourné, sans vérifier le côté droit de l'expression. Par conséquent, l'opérateur
&&
peut être utilisé dans le rendu conditionnel. Avec lui, vous pouvez soit renvoyer quelque chose qui sera affiché à l'écran, soit ne rien retourner.
Analysons le code de l'application de formation.
L'état du composant
App
stocke un tableau de chaînes
unreadMessages
. Chaque ligne de ce tableau représente un message non lu. La page affiche le nombre de messages non lus, déterminé en fonction de la longueur du tableau. Si ce tableau est vide, c'est-à-dire qu'il n'y aura pas un seul élément, alors l'application affichera ce qui est montré ci-dessous sur la page.
L'application nous informe qu'il n'y a pas de messages non lusPour obtenir cet effet, il suffit d'amener le tableau sous cette forme:
unreadMessages: []
.
S'il n'y a pas de messages non lus, il est tout à fait possible de ne pas afficher de message du tout. Si nous utilisons l'opérateur ternaire dont nous avons parlé la
dernière fois pour implémenter ce comportement de l'application, la méthode
render()
du composant
App
peut être réécrite comme suit:
render() { return ( <div> { this.state.unreadMessages.length > 0 ? <h2>You have {this.state.unreadMessages.length} unread messages!</h2> : null } </div> ) }
Maintenant, si le tableau
unreadMessages
vide, rien ne sera affiché sur la page. Mais le code présenté ici peut être simplifié en utilisant l'opérateur
&&
. Voici à quoi cela ressemblerait:
render() { return ( <div> { this.state.unreadMessages.length > 0 && <h2>You have {this.state.unreadMessages.length} unread messages!</h2> } </div> ) }
S'il y a quelque chose dans le tableau, le côté droit de l'expression s'affiche sur la page. Si le tableau est vide, rien ne s'affiche sur la page.
Cela ne veut pas dire que l'utilisation de l'opérateur
&&
dans le rendu conditionnel est absolument nécessaire, car le même effet peut être obtenu en utilisant un opérateur ternaire qui renvoie
null
si la condition qu'il teste est fausse. Mais l'approche présentée ici simplifie le code et, en outre, il est utilisé assez souvent, vous pouvez donc le rencontrer lors de la lecture des programmes d'autres personnes.
Leçon 38. Atelier. Rendu conditionnel
→
Original▍Emploi
Voici le code du composant fonctionnel
App
, qui est stocké dans le fichier
App.js
d'un projet standard créé à l'aide de create-react-app.
import React from "react" function App() { return ( <div> Code goes here </div> ) } export default App
Vous devez effectuer les opérations suivantes:
- Convertissez le code du composant pour lui donner un état.
- Assurez-vous que l'état du composant stocke des informations indiquant si l'utilisateur s'est «connecté» ou non (dans cet exercice, «se connecter» et «se déconnecter» du système signifie uniquement changer la valeur correspondante stockée dans l'état).
- Ajoutez à la page que le composant forme un bouton qui permet à l'utilisateur de se connecter et de se déconnecter.
- Il s'agit d'une tâche supplémentaire. Assurez-vous que si l'utilisateur n'est pas connecté, le bouton affichera
LOG IN
, et s'il est connecté, LOG OUT
.
- Sur la page formée par le composant,
Logged in
si l'utilisateur est connecté et Logged out
s'il n'est pas Logged out
.
Si maintenant vous sentez qu’il est difficile pour vous de commencer à résoudre ces problèmes, jetez un œil aux conseils et mettez-vous au travail.
▍Conseils
Pour terminer cette tâche, vous devez rappeler une grande partie de ce dont nous avons parlé dans les classes précédentes. Pour commencer, un composant qui peut avoir un état doit être un composant basé sur une classe. Ce composant doit avoir un constructeur. Dans l'état du composant, vous pouvez stocker une propriété logique, par exemple, elle peut être appelée
isLoggedIn
, dont la valeur,
true
ou
false
, indique si l'utilisateur est connecté ou non. Pour que le bouton qui doit être ajouté à la page générée par l'application puisse exécuter ses fonctions, il aura besoin d'un
onClick
événements
onClick
. Afin d'afficher différents textes, en fonction de la valeur changeante de l'état, il sera nécessaire de recourir à la technologie de rendu conditionnel.
▍Solution
Nous transformons le composant fonctionnel disponible dans le code en composant basé sur une classe. Nous en avons besoin pour plusieurs raisons. Tout d'abord, nous devons travailler avec l'état de l'application. Deuxièmement, nous avons besoin d'un gestionnaire d'événements qui est appelé lorsqu'un bouton est cliqué. En principe, vous pouvez écrire une fonction indépendante et l'utiliser pour gérer les événements de bouton, mais je préfère décrire les gestionnaires au sein des classes de composants.
Voici à quoi ressemblera le code d'un composant fonctionnel converti en composant basé sur une classe. Ici, dans le constructeur du composant, nous décrivons son état initial, qui contient la propriété
isLoggedIn
définie sur
false
.
import React from "react" class App extends React.Component { constructor() { super() this.state = { isLoggedIn: false } } render() { return ( <div> Code goes here </div> ) } } export default App
Le code ci-dessus est une solution aux première et deuxième parties de la tâche. Nous allons maintenant travailler sur l'ajout d'un bouton à la page affichée par le composant. Jusqu'à présent, ce bouton affichera la même inscription indépendamment de ce qui est stocké dans l'état de l'application. Nous allons l'équiper d'un gestionnaire d'événement, en y plaçant, pour vérifier l'opérabilité de notre code, une simple commande pour sortir un message vers la console. De plus, nous, dans le constructeur du composant, lierons ce gestionnaire à
this
,
this
qui nous sera utile lorsque nous, dans le code de ce gestionnaire, accèderons aux mécanismes conçus pour travailler avec l'état du composant. Maintenant, le code ressemble à ci-dessous.
import React from "react" class App extends React.Component { constructor() { super() this.state = { isLoggedIn: false } this.handleClick = this.handleClick.bind(this) } handleClick() { console.log("I'm working!") } render() { return ( <div> <button onClick={this.handleClick}>LOG IN</button> </div> ) } } export default App
Lorsque vous cliquez sur le bouton
LOG IN
,
I'm working!
.
Rappelons maintenant que nous devons, quand un bouton est
isLoggedIn
, la propriété
isLoggedIn
stockée dans l'état
isLoggedIn
de
true
à
false
et vice versa. Pour ce faire, dans le gestionnaire de clic de bouton, vous devrez appeler la fonction
this.setState()
, qui peut être utilisée de deux manières. À savoir, il peut être fourni, sous la forme d'un objet, une nouvelle idée de ce qui devrait être contenu dans l'état. La deuxième variante de son utilisation prévoit le transfert d'une fonction qui reprend l'état précédent du composant et en forme un nouveau, renvoyant, à nouveau, l'objet. C'est ce que nous ferons. C'est ce que nous avons obtenu à ce stade du travail.
import React from "react" class App extends React.Component { constructor() { super() this.state = { isLoggedIn: false } this.handleClick = this.handleClick.bind(this) } handleClick() { this.setState(prevState => { return { isLoggedIn: !prevState.isLoggedIn } }) } render() { return ( <div> <button onClick={this.handleClick}>LOG IN</button> </div> ) } } export default App
Ici, nous pourrions utiliser la construction if-else, mais nous convertissons simplement
true
en
false
et
false
en
true
utilisant l'opérateur logique
!
(PAS).
Jusqu'à présent, nous n'avons aucun mécanisme qui, basé sur ce qui est stocké dans l'état, nous permettrait d'influencer l'apparence de l'application. Par conséquent, nous allons maintenant résoudre la tâche supplémentaire de la tâche numéro 3. A savoir, nous allons faire changer l'étiquette sur le bouton en fonction de l'état du composant. Pour ce faire, vous pouvez déclarer une variable dans la méthode
render()
dont la valeur,
LOG IN
ou
LOG OUT
, dépend de ce qui est stocké dans l'état. Cette valeur peut ensuite être utilisée comme texte de bouton. Voici à quoi ça ressemble.
import React from "react" class App extends React.Component { constructor() { super() this.state = { isLoggedIn: false } this.handleClick = this.handleClick.bind(this) } handleClick() { this.setState(prevState => { return { isLoggedIn: !prevState.isLoggedIn } }) } render() { let buttonText = this.state.isLoggedIn ? "LOG OUT" : "LOG IN" return ( <div> <button onClick={this.handleClick}>{buttonText}</button> </div> ) } } export default App
Prenons maintenant la quatrième partie du devoir. Nous afficherons du texte sur la page selon que l'utilisateur est connecté ou non. En fait, compte tenu de tout ce qui est déjà présent dans le code du composant, la résolution de ce problème est très simple. Voici le code terminé pour le fichier
App.js
import React from "react" class App extends React.Component { constructor() { super() this.state = { isLoggedIn: false } this.handleClick = this.handleClick.bind(this) } handleClick() { this.setState(prevState => { return { isLoggedIn: !prevState.isLoggedIn } }) } render() { let buttonText = this.state.isLoggedIn ? "LOG OUT" : "LOG IN" let displayText = this.state.isLoggedIn ? "Logged in" : "Logged out" return ( <div> <button onClick={this.handleClick}>{buttonText}</button> <h1>{displayText}</h1> </div> ) } } export default App
Voici à quoi ressemble l'application dans le navigateur.
Page d'application dans le navigateurUn clic sur le bouton
LOG IN
illustré dans la figure précédente modifie l'état de l'application, après quoi
LOG OUT
s'affiche sur le bouton et un texte s'affiche sur la page informant l'utilisateur qu'il est connecté.
Résumé
Aujourd'hui, nous avons continué à parler de rendu conditionnel, examiné l'utilisation de l'opérateur
&&
et terminé une tâche pratique impliquant de nombreux mécanismes que nous avons étudiés. La prochaine fois, vous continuerez à travailler sur l'application Todo et sur un nouveau sujet.
Chers lecteurs! Avez-vous fait face à la tâche pratique d'aujourd'hui?