Im heutigen Teil der Übersetzung des React-Lernprogramms können Sie weiter an der Todo-Anwendung arbeiten und sicherstellen, dass das Klicken auf die Flags den Status der Komponente beeinflusst.

→ 
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 33. Workshop. TODO-Anwendung. Etappe Nummer 6
→ 
Original»Job
In dieser praktischen Lektion werden wir weiter an der Todo-Anwendung arbeiten und sicherstellen, dass Benutzeraktionen den Status der Komponente beeinflussen. Es geht darum, es uns zu ermöglichen, die Elemente auf der Aufgabenliste als erledigt oder nicht erledigt zu markieren. Im Folgenden finden Sie den Code der 
App Komponente sowie einige der verfügbaren Werkstücke und Kommentare, die Sie bei der Ausführung der Aufgabe unterstützen sollen. Hier ist, wozu Sie heute eingeladen sind:
- Erstellen Sie in der AppKomponente einen Ereignishandler, der auf Flag-Änderungen reagiert (es handelt sich um das EreignisonChange), und ändert den Status der Anwendung entsprechend. Vielleicht ist dies der schwierigste Teil der heutigen Aufgabe. Um damit fertig zu werden, achten Sie auf die Kommentare und Leerzeichen im Code.
- TodoItemdie entsprechende Methode an die- TodoItemKomponente.
- TodoItemin der- TodoItemKomponente einen Mechanismus, der beim- onChangedes- onChangeEreignisses die an die Komponenteninstanz übergebene Methode aufruft und ihr die- onChange(- id) übergibt, die dem Flag entspricht, auf das der Benutzer geklickt hat.
Hier ist der Code für die 
App Komponente:
 import React from "react" import TodoItem from "./TodoItem" import todosData from "./todosData" class App extends React.Component {   constructor() {       super()       this.state = {           todos: todosData       }       this.handleChange = this.handleChange.bind(this)   }     handleChange(id) {        
▍Lösung
Erstellen Sie zunächst einen einfachen Mechanismus zum Überprüfen des Aufrufs der 
handleChange() -Methode. Wir bringen es nämlich in diese Form:
 handleChange(id) {   console.log("Changed", id) } 
Jetzt implementieren wir, was gemäß den Absätzen 2 und 3 der Aufgabe zu tun ist. Das heißt, wir stellen eine Verbindung zwischen dem Klicken auf das Flag und dem Aufrufen der 
handleChange() -Methode her, indem 
handleChange() die 
id dieses Flags an dieses übergeben.
Um einen Verweis auf 
handleChange() an eine Instanz der 
TodoItem Komponente zu übergeben, können Sie das Gleiche tun, indem Sie Eigenschaften an diese übergeben und den Code zum Erstellen der Liste der Komponenten wie 
TodoItem neu schreiben:
 const todoItems = this.state.todos.map(item => <TodoItem key={item.id} item={item} handleChange={this.handleChange}/>) 
Beachten Sie, dass die 
handleChange Eigenschaft, die 
TodoItem Komponenten zur Verfügung 
TodoItem , einen Verweis auf die 
handleChange Methode der Instanz der 
App Komponente enthält. In der 
TodoItem Komponente kann auf diese Methode auf dieselbe Weise zugegriffen werden wie auf andere an sie übergebene Eigenschaften. Zu diesem Zeitpunkt sieht der 
TodoItem Code folgendermaßen aus:
 import React from "react" function TodoItem(props) {   return (       <div className="todo-item">           <input               type="checkbox"               checked={props.item.completed}               onChange={() => console.log("Changed!")}           />           <p>{props.item.text}</p>       </div>   ) } export default TodoItem 
Um die 
handleChange Methode im Komponentencode 
handleChange , können Sie ein Konstrukt der Form 
props.handleChange() . In diesem Fall muss diese Methode die 
id Elements übergeben. Der 
onChange Ereignishandler akzeptiert ein Ereignisobjekt. Wir brauchen dieses Objekt nicht, um die 
handleChange() -Methode 
handleChange() . Wir schreiben den Code, in dem wir dem Element den 
onChange Ereignishandler zuweisen, wie folgt um:
 onChange={(event) => props.handleChange(props.item.id)} 
Hier rufen wir die 
handleChange() -Methode auf und übergeben ihr den Elementbezeichner aus den an sie übergebenen Eigenschaften einer anderen Funktion, die das Ereignisobjekt akzeptiert. Da wir dieses Objekt hier nicht verwenden, kann der Code folgendermaßen umgeschrieben werden:
 onChange={() => props.handleChange(props.item.id)} 
Versuchen Sie nun, die Anwendung auszuführen, und klicken Sie beim Öffnen der Konsole auf die Kontrollkästchen.
Testen der handleChange () -MethodeNachrichten mit Bezeichnern von Flags, mit denen wir auf klicken, gelangen zur Konsole. Die Flags ändern jedoch noch nicht das Erscheinungsbild, da die 
handleChange() -Methode 
handleChange() keinen Mechanismus zum Ändern des Status einer Komponente implementiert 
handleChange() . Infolgedessen haben wir uns gerade mit dem zweiten und dritten Teil des Auftrags befasst, und jetzt können wir beginnen, an seinem ersten, vielleicht interessantesten Teil, in Bezug auf die Arbeit mit dem Staat zu arbeiten.
Zunächst müssen wir das Problem bezüglich des Status lösen, in dem ein Array in einem Status gespeichert ist, dessen Element als Reaktion auf einen Klick auf ein Flag geändert werden muss. Wir sollten jedoch das in der alten Version des Status gespeicherte Array nicht ändern. Das heißt, Sie können beispielsweise nicht einfach durch ein Array von Objekten gehen, die sich bereits in einem Status befinden, das erforderliche Element finden und dessen 
completed Eigenschaft ändern. Wir brauchen, dass nach dem Ändern des Zustands ein neues Array gebildet wird, von dem eines der Elemente geändert wird und der Rest derselbe bleibt wie zuvor. Einer der Ansätze zur Bildung eines solchen Arrays ist die Verwendung der Array-Methode 
map() , die in den Kommentaren zur Aufgabe erwähnt wird. Wir werden den Code in der 
setState() -Methode schreiben. Lassen Sie uns 
handleChange() Code der 
handleChange() -Methode aus der 
App Komponente in das folgende Formular bringen:
 handleChange(id) {   this.setState(prevState => {         }) } 
Mit der 
map() -Methode 
prevState.todos wir nun das Array 
prevState.todos und suchen nach dem Element, das wir darin benötigen, 
prevState.todos dem Element, dessen 
id an die 
handleChange() -Methode übergeben wird, und ändern dann die 
completed Eigenschaft. Die 
map() -Methode gibt ein neues Array zurück, das im neuen Status der Anwendung verwendet wird. Daher schreiben wir dieses Array in eine Konstante. So sieht es aus:
 handleChange(id) {   this.setState(prevState => {       const updatedTodos = prevState.todos.map(todo => {           if (todo.id === id) {               todo.completed = !todo.completed           }           return todo       })       return {           todos: updatedTodos       }   }) } 
Wenn hier während der Verarbeitung des Arrays mit 
map() ein Element 
handleChange() , dessen 
id gleich der an die 
handleChange() -Methode übergebenen 
handleChange() ist, wird der Wert der 
completed Eigenschaft dieses Elements umgekehrt ( 
true bis 
false und umgekehrt). Danach gibt 
map() unabhängig davon, ob das Element geändert wurde, dieses Element zurück. Es fällt in ein neues Array (hier dargestellt durch die 
updatedTodos Konstante) unter demselben Index, unter dem sich das entsprechende Element aus der vorherigen Version des Status im 
todos Array befand. Nachdem das gesamte Array gescannt und das Array 
updatedTodos vollständig gebildet wurde, wird dieses Array als Wert der Eigenschaft 
todos des Objekts verwendet, das von der Methode 
setState() wird, bei der es sich um eine neue Version des Status handelt.
Wenn Sie die Anwendung jetzt starten, stellen Sie möglicherweise fest, dass die Flags auf unsere Effekte reagieren. Dies deutet darauf hin, dass durch Klicken auf sie der Status der Anwendung geändert wird. Anschließend werden sie mit neuen Daten neu gerendert.
Zusammenfassung
Heute hatten wir beim Schreiben eine funktionierende Todo-Anwendung zur Verfügung, bei der wir viele der von uns untersuchten React-Konzepte verwendeten. Tatsächlich ist es immer noch durchaus möglich, es zu verfeinern, insbesondere zu stilisieren und seine Fähigkeiten zu erweitern. Wir werden in einer der folgenden Klassen zu ihm zurückkehren.
Liebe Leser! Haben Sie die heutige praktische Arbeit gemeistert?
