Aggiungere gestori di eventi e aggiornare lo stato
L'archiviazione dello stato nel componente di base dell'applicazione (App
) permette di leggere i valori correnti di tutte le proprietà importanti. Non è necessario interagire con ogni componente. È anche possibile centralizzare gli eventi, assicurando che i dati vengano modificati in una sola posizione.
Scenario
Si vuole consentire agli utenti dell'applicazione di toccare un elemento nell'elenco degli ingredienti una volta preparato. L'elemento sarà contrassegnato come prepared
nello stato. Questa impostazione si rifletterà nell'intera applicazione. Quando i valori cambiano, il componente rileva gli aggiornamenti e ripete la valutazione se necessario.
Aggiungere il metodo per gli eventi clic
Aprire il file App.jsx.
Creare un listener di eventi denominato
ingredientClick
. Aggiungerlo sotto il commentoTODO: Create ingredientClick event listener
.function ingredientClick(index) { const updatedRecipe = { ... recipe }; updatedRecipe.ingredients[index].prepared = !updatedRecipe.ingredients[index].prepared; setRecipe(updatedRecipe); }
La logica inizia con la creazione di una copia di
recipe
mediante l'operatore spread. Si recupera quindi l'oggettoingredient
aggiornato usandoindex
. Si inverte il valore diprepared
. Infine, si sostituisce l'oggettorecipe
nello stato usandosetRecipe
.Aggiungere
IngredientList
, un componente che visualizza gli ingredienti di una ricetta. A tale scopo, aggiungere il codice seguente dopo il commentoTODO: Pass ingredients and event listener to IngredientList
.<IngredientList ingredients={recipe.ingredients} onClick={ ingredientClick } />
Si noti che è possibile passare la funzione
ingredientClick
allo stesso modo in cui si passa qualsiasi altra proprietà a un componente.
Aggiornare IngredientList per l'uso del listener di eventi
In React le proprietà possono essere qualsiasi tipo JavaScript, incluse le funzioni. È quindi possibile impostare un gestore di eventi come proprietà. Questa configurazione consente di centralizzare la gestione degli eventi.
Si aggiornerà ora IngredientList
per usare la funzione ingredientClick
creata in precedenza:
Aprire il file IngredientList.jsx. Si userà il componente presente nel file per illustrare come usare gli eventi.
Sotto il commento
TODO: Add onClick event
aggiungere il codice JSX seguente.onClick={ () => props.onClick(index) }
Si noti che è possibile passare un parametro nella funzione
onClick
della proprietà.Nota
Non esiste un motivo particolare per cui è stato usato il nome
onClick
nel componenteprops
. È semplicemente un nome scelto fra tanti. È stato passato in precedenza dal file App.jsx.
Testare la pagina
- Salvare tutti i file.
- Tornare al browser e aggiornare la pagina. Se si selezionano gli ingredienti, lo stato dovrebbe cambiare. Cambia a causa dell'aggiornamento della proprietà
prepared
.