2017-10-17 3 views
2

J'essaie de changer l'état à l'aide de setState, puis j'appelle une action avec un nouvel état, mais React envoie l'action juste avant que le nouvel état ait été défini. Comment puis-je attendre le nouvel état, puis envoyer l'action?L'état de l'application change juste après l'envoi de l'action

addressInput = e => { 
    this.setState({ 
    address: e.target.value 
    }); 
    this.props.filterSearch(this.state.address) //this will be called before state is set        
} 

Répondre

3

this.setState fournit une fonction de rappel en tant que second paramètre, qui est appelée après le changement d'état a eu lieu. Vous devez utiliser la fonction de rappel comme suit

addressInput = e => { 
    this.setState({ 
    address: e.target.value 
    }, 
    this.props.filterSearch(this.state.address)); 
} 

De l'docs:

setState() ne met pas toujours immédiatement le composant. Il peut lot ou différer la mise à jour jusqu'à plus tard. Cela rend la lecture this.state juste après avoir appelé setState() un écueil potentiel. À la place, utilisez componentDidUpdate ou un callback setState (setState (updater, callback)), dont l'un ou l'autre est garanti après la mise à jour.