Hinzufügen von Ereignishandlern und Ändern des Zustands
Das Speichern des Zustands in der Kernkomponente Ihrer Anwendung (App
) ermöglicht es Ihnen, die aktuellen Werte aller wichtigen Eigenschaften zu lesen. Sie müssen nicht mit jeder Komponente interagieren. Außerdem können Sie Ereignisse zentralisieren, wodurch sichergestellt wird, dass die Daten nur an einem Speicherort geändert werden.
Szenario
Sie möchten es Benutzern der Anwendung ermöglichen, auf ein Element in der Zutatenliste zu tippen, um es als vorbereitet zu markieren. Dieses Element wird im Zustand als prepared
(vorbereitet) gekennzeichnet. Diese Einstellung wird in der gesamten Anwendung genutzt. Wenn die Werte geändert werden, erkennt die Komponente die Änderungen und wertet diese bei Bedarf neu aus.
Hinzufügen der Methode für Click-Ereignisse
Öffnen Sie die Datei App.jsx.
Erstellen Sie einen Ereignislistener namens
ingredientClick
. Fügen Sie ihn unter dem KommentarTODO: Create ingredientClick event listener
hinzu.function ingredientClick(index) { const updatedRecipe = { ... recipe }; updatedRecipe.ingredients[index].prepared = !updatedRecipe.ingredients[index].prepared; setRecipe(updatedRecipe); }
Die Logik beginnt damit, mithilfe des Spread-Operators eine Kopie von
recipe
zu erstellen. Dann wird der geänderteingredient
-Wert mitindex
abgerufen. Dann kehren Sie den Wert vonprepared
um. Schließlich ersetzen Sie dasrecipe
-Objekt im Zustand mithilfe vonsetRecipe
.Fügen Sie
IngredientList
hinzu. Dabei handelt es sich um eine Komponente, die die Zutaten eines Rezepts anzeigt. Fügen Sie hierzu den folgenden Code nach dem KommentarTODO: Pass ingredients and event listener to IngredientList
hinzu.<IngredientList ingredients={recipe.ingredients} onClick={ ingredientClick } />
Beachten Sie, dass Sie die Funktion
ingredientClick
nun wie jede andere Eigenschaft an eine Komponente übergeben können.
Ändern von IngredientList zum Verwenden eines Ereignislisteners
In React können Eigenschaften (bzw. Props) jeden beliebigen JavaScript-Typ aufweisen, einschließlich Funktionen. Sie können also auch einen Ereignishandler als Eigenschaft einrichten. Dieses Setup ermöglicht es Ihnen, die Ereignisbehandlung zu zentralisieren.
Als Nächstes ändern Sie IngredientList
, um die zuvor erstellte Funktion ingredientClick
zu verwenden:
Öffnen Sie die Datei IngredientList.jsx. Beachten Sie die vorhandene Komponente. Anhand dieser Komponente wird veranschaulicht, wie Sie Ereignisse verwenden.
Fügen Sie den folgenden JSX-Code unter dem Kommentar
TODO: Add onClick event
hinzu.onClick={ () => props.onClick(index) }
Beachten Sie, dass Sie einen Parameter an die
onClick
-Eigenschaftsfunktion übergeben können.Hinweis
Es gibt keinen besonderen Grund dafür, dass hier der Name
onClick
für dieprops
-Werte der Komponente verwendet wird. Dieser Name wurde lediglich für dieses Modul ausgewählt. Er wurde zuvor von der Datei App.jsx weitergegeben.
Testen der Seite
- Speichern Sie alle Dateien.
- Kehren Sie zum Browser zurück, und aktualisieren Sie die Seite. Wenn Sie die Zutaten auswählen, sollte der Zustand ändern (durchgestrichen). Der Zustand ändert sich, weil die Eigenschaft
prepared
geändert wird.