In der Ăbersetzung des nĂ€chsten Teils des React-Schulungskurses machen wir Sie heute auf die zweite Lektion zum bedingten Rendern und einen Workshop zu diesem Thema aufmerksam.

â
Teil 1: KursĂŒbersicht, GrĂŒnde fĂŒr die Beliebtheit von React, ReactDOM und JSXâ
Teil 2: Funktionskomponentenâ
Teil 3: Komponentendateien, Projektstrukturâ
Teil 4: ĂŒbergeordnete und untergeordnete Komponentenâ
Teil 5: Beginn der Arbeit an einer TODO-Anwendung, Grundlagen des Stylingsâ
Teil 6: Ăber einige Funktionen des Kurses, JSX und JavaScriptâ
Teil 7: Inline-Stileâ
Teil 8: Fortsetzung der Arbeit an der TODO-Anwendung, Vertrautheit mit den Eigenschaften von Komponentenâ
Teil 9: Komponenteneigenschaftenâ
Teil 10: Workshop zum Arbeiten mit Komponenteneigenschaften und Stylingâ
Teil 11: Dynamische Markup-Generierung und Map-Arrays-Methodeâ
Teil 12: Workshop, dritte Phase der Arbeit an einer TODO-Anwendungâ
Teil 13: Klassenbasierte Komponentenâ
Teil 14: Workshop zu klassenbasierten Komponenten, Komponentenstatusâ
Teil 15: Komponentengesundheitsworkshopsâ
Teil 16: Die vierte Phase der Arbeit an einer TODO-Anwendung, die Ereignisbehandlungâ
Teil 17: FĂŒnfte Phase der Arbeit an einer TODO-Anwendung, Ănderung des Status von Komponentenâ
Teil 18: Die sechste Phase der Arbeit an einer TODO-Anwendungâ
Teil 19: Methoden des KomponentenlebenszyklusTeil 20: Die erste Lektion in bedingtem Rendernâ
Teil 21: Zweite Lektion und Workshop zum bedingten Rendernâ
Teil 22: Die siebte Phase der Arbeit an einer TODO-Anwendung, bei der Daten aus externen Quellen heruntergeladen werdenâ
Teil 23: Erste Lektion zum Arbeiten mit Formularenâ
Teil 24: Lektion der zweiten Formâ
Teil 25: Workshop zum Arbeiten mit Formularenâ
Teil 26: Anwendungsarchitektur, Container- / Komponentenmusterâ
Teil 27: KursprojektLektion 37. Bedingtes Rendern, Teil 2
â
OriginalIm heutigen Tutorial zum bedingten Rendern werden wir uns mit der Verwendung des logischen Operators
&&
(And)
&&
. Wir werden mit einem Standardprojekt experimentieren, das von create-react-app erstellt wurde und in
App.js
Datei
App.js
der folgende Code befindet:
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
Jetzt sieht die Anwendung im Browser wie unten gezeigt aus.
Anwendungsseite im BrowserMöglicherweise haben Sie den Operator
&&
in Konstruktionen wie
true && false
(was
false
ergibt). Damit der
true
Ausdruck als Ergebnis der Berechnung eines solchen Ausdrucks zurĂŒckgegeben wird, sollte er wie
true && true
aussehen. Bei der Verarbeitung solcher AusdrĂŒcke ermittelt JavaScript, ob die linke Seite wahr ist, und gibt in diesem Fall einfach das zurĂŒck, was sich auf der rechten Seite befindet. Wenn ein Ausdruck des Formulars
false && false
verarbeitet wird, wird
false
sofort zurĂŒckgegeben, ohne die rechte Seite des Ausdrucks zu ĂŒberprĂŒfen. Infolgedessen kann der Operator
&&
beim bedingten Rendern verwendet werden. Damit können Sie entweder etwas zurĂŒckgeben, das auf dem Bildschirm angezeigt wird, oder nichts zurĂŒckgeben.
Lassen Sie uns den Code der Trainingsanwendung analysieren.
Der Status der
App
Komponente speichert ein Array von
unreadMessages
Zeichenfolgen. Jede Zeile in diesem Array reprÀsentiert eine ungelesene Nachricht. Auf der Seite wird die Anzahl der ungelesenen Nachrichten angezeigt, die anhand der LÀnge des Arrays ermittelt werden. Wenn dieses Array leer ist, dh kein einzelnes Element enthÀlt, zeigt die Anwendung an, was unten auf der Seite angezeigt wird.
Die Anwendung informiert uns, dass keine ungelesenen Nachrichten vorliegenUm diesen Effekt zu erzielen, reicht es aus, das Array in die folgende Form zu bringen:
unreadMessages: []
.
Wenn keine ungelesenen Nachrichten vorhanden sind, ist es durchaus möglich, ĂŒberhaupt keine Nachricht anzuzeigen. Wenn wir den ternĂ€ren Operator verwenden, ĂŒber den wir das
letzte Mal gesprochen haben , um dieses Verhalten der Anwendung zu implementieren, kann die
render()
-Methode der
App
Komponente wie folgt umgeschrieben werden:
render() { return ( <div> { this.state.unreadMessages.length > 0 ? <h2>You have {this.state.unreadMessages.length} unread messages!</h2> : null } </div> ) }
Wenn das Array
unreadMessages
leer ist, wird auf der Seite nichts angezeigt. Der hier dargestellte Code kann jedoch mithilfe des Operators
&&
vereinfacht werden. So wĂŒrde es aussehen:
render() { return ( <div> { this.state.unreadMessages.length > 0 && <h2>You have {this.state.unreadMessages.length} unread messages!</h2> } </div> ) }
Wenn sich etwas im Array befindet, wird die rechte Seite des Ausdrucks auf der Seite angezeigt. Wenn das Array leer ist, wird auf der Seite nichts angezeigt.
Dies bedeutet nicht, dass die Verwendung des Operators
&&
beim bedingten Rendern unbedingt erforderlich ist, da der gleiche Effekt mit einem ternÀren Operator erzielt werden kann, der
null
zurĂŒckgibt, wenn die getestete Bedingung falsch ist. Der hier vorgestellte Ansatz vereinfacht jedoch den Code und wird auĂerdem hĂ€ufig verwendet, sodass Sie ihn möglicherweise beim Lesen der Programme anderer Personen finden.
Lektion 38. Workshop. Bedingtes Rendern
â
Original»Job
Hier ist der Code der
App
Funktionskomponente, der in der
App.js
Datei eines Standardprojekts gespeichert ist, das mit create-react-app erstellt wurde.
import React from "react" function App() { return ( <div> Code goes here </div> ) } export default App
Sie mĂŒssen Folgendes tun:
- Konvertieren Sie den Komponentencode, um ihn mit state auszustatten.
- Stellen Sie sicher, dass der Status der Komponente Informationen darĂŒber speichert, ob der Benutzer âangemeldetâ ist oder nicht (in dieser Ăbung bedeutet âAnmeldenâ und âAbmeldenâ des Systems nur das Ăndern des entsprechenden im Status gespeicherten Werts).
- FĂŒgen Sie der Seite hinzu, dass die Komponente eine SchaltflĂ€che bildet, mit der sich der Benutzer an- und abmelden kann.
- Dies ist eine zusÀtzliche Aufgabe. Stellen Sie sicher, dass auf der SchaltflÀche ANMELDEN angezeigt wird, wenn der Benutzer nicht angemeldet ist. Wenn er angemeldet ist, wird
LOG OUT
.
Logged in
Sie auf der von der Komponente gebildeten Seite Logged in
wenn der Benutzer angemeldet ist, und Logged out
wenn er nicht Logged out
.
Wenn Sie jetzt das GefĂŒhl haben, dass es fĂŒr Sie schwierig ist, diese Probleme zu lösen, lesen Sie die Tipps und machen Sie sich an die Arbeit.
âTipps
Um diese Aufgabe abzuschlieĂen, mĂŒssen Sie sich an vieles erinnern, worĂŒber wir in frĂŒheren Kursen gesprochen haben. ZunĂ€chst muss eine Komponente, die einen Status haben kann, eine Komponente sein, die auf einer Klasse basiert. Diese Komponente muss einen Konstruktor haben. Im Status der Komponente können Sie eine logische Eigenschaft speichern, die beispielsweise als
isLoggedIn
kann. Der Wert
true
oder
false
gibt an, ob der Benutzer angemeldet ist oder nicht. Damit die SchaltflĂ€che, die der von der Anwendung generierten Seite hinzugefĂŒgt werden muss, ihre Funktionen ausfĂŒhren kann, ist ein
onClick
Ereignishandler
onClick
. Um je nach dem sich Ă€ndernden Wert des Staates unterschiedliche Texte anzuzeigen, muss auf die Technologie des bedingten Renderings zurĂŒckgegriffen werden.
âLösung
Wir transformieren die im Code verfĂŒgbare Funktionskomponente in die Komponente basierend auf einer Klasse. Wir brauchen dies aus mehreren GrĂŒnden. ZunĂ€chst mĂŒssen wir mit dem Status der Anwendung arbeiten. Zweitens benötigen wir einen Ereignishandler, der aufgerufen wird, wenn auf eine SchaltflĂ€che geklickt wird. Im Prinzip können Sie eine unabhĂ€ngige Funktion schreiben und damit SchaltflĂ€chenereignisse verarbeiten. Ich beschreibe jedoch lieber Handler innerhalb der Komponentenklassen.
So sieht der Code fĂŒr eine Funktionskomponente aus, die in eine klassenbasierte Komponente konvertiert wurde. Hier beschreiben wir im Komponentenkonstruktor seinen Anfangszustand, der die auf
false
isLoggedIn
Eigenschaft
isLoggedIn
enthÀlt.
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
Der obige Code ist eine Lösung fĂŒr den ersten und zweiten Teil der Aufgabe. Jetzt arbeiten wir daran, der von der Komponente angezeigten Seite eine SchaltflĂ€che hinzuzufĂŒgen. Bisher wird auf dieser SchaltflĂ€che dieselbe Beschriftung angezeigt, unabhĂ€ngig davon, was im Anwendungsstatus gespeichert ist. Wir werden es mit einem Ereignishandler ausstatten, der die FunktionsfĂ€higkeit unseres Codes ĂŒberprĂŒft. Dies ist ein einfacher Befehl, um eine Nachricht an die Konsole auszugeben. DarĂŒber hinaus binden wir im Komponentenkonstruktor diesen Handler an
this
, was fĂŒr uns nĂŒtzlich ist, wenn wir im Code dieses Handlers auf die Mechanismen zugreifen, die fĂŒr die Arbeit mit dem Status der Komponente ausgelegt sind. Jetzt sieht der Code wie folgt aus.
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
Wenn Sie auf die SchaltflÀche
LOG IN
klicken,
I'm working!
.
Erinnern wir uns nun daran, dass sich die im
isLoggedIn
gespeicherte Eigenschaft
isLoggedIn
beim Klicken auf die SchaltflÀche von
true
in
false
und umgekehrt
isLoggedIn
. Dazu mĂŒssen Sie im SchaltflĂ€chenklick-Handler die Funktion
this.setState()
, die auf zwei Arten verwendet werden kann. Es kann nĂ€mlich in Form eines Objekts eine neue Vorstellung davon vermittelt werden, was in dem Zustand enthalten sein soll. Die zweite Variante ihrer Verwendung sieht die Ăbertragung einer Funktion an sie vor, die den vorherigen Zustand der Komponente annimmt und einen neuen bildet und das Objekt wieder zurĂŒckgibt. Wir werden genau das tun. Das haben wir in dieser Phase der Arbeit bekommen.
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
Hier könnten wir das if-else-Konstrukt verwenden, aber wir konvertieren einfach
true
in
false
und
false
in
true
mithilfe des logischen Operators
!
(NICHT).
Bisher haben wir keinen Mechanismus, der es uns ermöglicht, basierend auf dem, was im Status gespeichert ist, das Erscheinungsbild der Anwendung zu beeinflussen. Daher werden wir jetzt die zusÀtzliche Aufgabe von Aufgabe Nummer 3 lösen. Wir werden nÀmlich die Beschriftung auf der SchaltflÀche abhÀngig vom Status der Komponente Àndern. Um dies zu erreichen, können Sie in der
render()
-Methode eine Variable deklarieren, deren Wert
LOG IN
oder
LOG OUT
davon abhÀngt, was im Status gespeichert ist. Dieser Wert kann dann als SchaltflÀchentext verwendet werden. So sieht es aus.
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
Nehmen wir nun den vierten Teil der Aufgabe. Wir werden Text auf der Seite anzeigen, je nachdem, ob der Benutzer angemeldet ist oder nicht. In der Tat ist die Lösung dieses Problems sehr einfach, wenn man alles berĂŒcksichtigt, was bereits im Komponentencode vorhanden ist. Unten finden Sie den fertigen Code fĂŒr die Datei
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
So sieht die Anwendung im Browser aus.
Anwendungsseite im BrowserDurch Klicken auf die in der vorherigen Abbildung gezeigte SchaltflÀche
LOG OUT
wird der Anwendungsstatus geÀndert.
LOG OUT
wird Anmelden auf der SchaltflĂ€che angezeigt und auf der Seite wird Text angezeigt, der den Benutzer darĂŒber informiert, dass er angemeldet ist.
Zusammenfassung
Heute haben wir weiter ĂŒber bedingtes Rendern gesprochen, die Verwendung des Operators
&&
untersucht und eine praktische Aufgabe mit vielen der von uns untersuchten Mechanismen erledigt. Das nÀchste Mal werden Sie weiter an der Todo-Anwendung und einem neuen Thema arbeiten.
Liebe Leser! Haben Sie die heutige praktische Aufgabe gemeistert?