Maison >interface Web >js tutoriel >Comment puis-je accéder aux valeurs d'état mises à jour immédiatement après avoir appelé setState() dans React ?

Comment puis-je accéder aux valeurs d'état mises à jour immédiatement après avoir appelé setState() dans React ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-16 16:35:15942parcourir

How Can I Access Updated State Values Immediately After Calling setState() in React?

L'énigme de la propagation de l'état de React

La méthode setState() de React pose un défi lorsque l'on tente de récupérer les valeurs d'état mises à jour immédiatement après leur mise à jour. Cela est dû à la nature asynchrone de setState().

Considérez le code suivant :

let total = newDealersDeckTotal.reduce((a, b) => a + b, 0);

console.log(total, 'tittal'); // Outputs correct total
setTimeout(() => {
  this.setState({ dealersOverallTotal: total });
}, 10);

console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1'); // Outputs incorrect total

Le problème ici est que l'appel setState() est asynchrone. Cela signifie que lorsque la deuxième instruction console.log s'exécute, l'état n'a pas encore été mis à jour.

Pour résoudre ce problème, le modèle de rappel peut être utilisé. Cela implique de transmettre une fonction de rappel à setState() qui sera exécutée une fois le changement d'état terminé :

this.setState({ dealersOverallTotal: total }, () => {
  console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1');
});

En utilisant cette approche, l'instruction du journal de la console ne s'exécutera qu'une fois l'état mis à jour, garantissant que la valeur correcte est affichée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn