Y a-t-il une raison pour laquelle l'appel de setSate()
dans une boucle l'empêcherait de mettre à jour plusieurs fois l'état?
J'ai un jsbin très basique qui souligne le problème que je vois. Il y a deux boutons. Une mise à jour du compteur de l'état par 1. L'autre appelle la fonction sous-jacente de One dans une boucle – ce qui semble être la mise à jour de l'état à plusieurs reprises.
Je connais plusieurs solutions à ce problème, mais je veux m'assurer que je comprends d'abord le mécanisme sous-jacent. Pourquoi ne peut-on pas setState
l'état d'appeler dans une boucle? Est-ce que je l'ai codé maladroitement qui empêche l'effet désiré?
Du document React :
SetState () ne mute pas immédiatement this.state mais crée une transition d'état en attente. L'accès à this.state après l'appel de cette méthode peut potentiellement renvoyer la valeur existante. Il n'y a aucune garantie de fonctionnement synchrone des appels pour configurer l'état et les appels peuvent être mis en lots pour des gains de performances.
Fondamentalement, n'appelez pas setState
en boucle. Ce qui se passe ici est exactement ce à quoi les docs se réfèrent: this.state
renvoie la valeur précédente, car la mise à jour de l'état en attente n'a pas encore été appliquée.
J'ai eu le même problème. Mais essayé avec une approche peu différente.
iterateData(data){ //data to render let copy=[]; for(let i=0;<data.length;i++){ copy.push(<SomeComp data=[i] />) } this.setState({ setComp:copy }); } render(){ return( <div> {this.state.setComp} </div> ); }
J'espère que ça aide.
J'ai pu faire fonctionner votre code, appeler setState en boucle en procédant comme suit:
manyClicks() { for (i = 0; i < 100; i++) { this.setState({clicks: this.state.clicks += 1}) } } enter code here
Espérons que cela vous aide!