Dodawanie programów obsługi zdarzeń i stanu aktualizacji
Przechowywanie stanu w podstawowym składniku aplikacji (App
) umożliwia odczytywanie bieżących wartości wszystkich ważnych właściwości. Nie musimy wchodzić w interakcje z każdym składnikiem. Możemy również scentralizować zdarzenia, zapewniając, że dane są modyfikowane tylko w jednej lokalizacji.
Scenariusz
Chcemy zezwolić użytkownikom aplikacji na naciśnięcie elementu na liście składników po jej zakończeniu. Oznaczymy element jako prepared
w stanie . To ustawienie zostanie odzwierciedlone w całej aplikacji. Po zmianie wartości składnik wykrywa aktualizacje i ponowne oceny zgodnie z potrzebami.
Dodawanie metody dla zdarzeń kliknięcia
Otwórz plik App.jsx.
Utwórz odbiornik zdarzeń o nazwie
ingredientClick
. Dodaj go pod komentarzem, który odczytuje:TODO: Create ingredientClick event listener
.function ingredientClick(index) { const updatedRecipe = { ... recipe }; updatedRecipe.ingredients[index].prepared = !updatedRecipe.ingredients[index].prepared; setRecipe(updatedRecipe); }
Logika rozpoczyna się od utworzenia kopii
recipe
przy użyciu operatora spreadu. Następnie pobieramy aktualizacjęingredient
przy użyciu elementuindex
. Odwracamy wartośćprepared
. Na koniec zastępujemyrecipe
obiekt w stanie przy użyciu poleceniasetRecipe
.Dodaj
IngredientList
składnik , który wyświetla składniki przepisu. Aby to zrobić, dodaj następujący kod po komentarzu, który odczytuje:TODO: Pass ingredients and event listener to IngredientList
.<IngredientList ingredients={recipe.ingredients} onClick={ ingredientClick } />
Zwróć uwagę,
ingredientClick
że możemy przekazać funkcję, ponieważ przekażemy dowolną inną rekwizytę do składnika.
Aktualizowanie składnikaList do używania odbiornika zdarzeń
W rozwiązaniu React właściwości (lub rekwizyty) mogą być dowolnym typem języka JavaScript, w tym funkcjami. Możemy więc skonfigurować program obsługi zdarzeń jako prop. Ta konfiguracja umożliwia scentralizowanie obsługi zdarzeń.
Zaktualizujmy IngredientList
, aby użyć utworzonej ingredientClick
wcześniej funkcji:
Otwórz plik IngredientList.jsx. Zwróć uwagę na istniejący składnik. Użyjemy tego składnika, aby pokazać, jak używać zdarzeń.
Poniżej komentarza
TODO: Add onClick event
dodaj następujący kod JSX.onClick={ () => props.onClick(index) }
Zwróć uwagę, że możemy przekazać parametr do funkcji prop
onClick
.Uwaga
Nie ma konkretnego powodu, dla którego
props
użyliśmy nazwyonClick
składnika . To była tylko nazwa, która została wybrana. Przekazano go wcześniej z pliku App.jsx .
Testowanie strony
- Zapisz wszystkie pliki.
- Wróć do przeglądarki i odśwież stronę. W przypadku wybrania składników stan line-through powinien ulec zmianie. Zmienia się, ponieważ
prepared
właściwość jest aktualizowana.