J'ai été en utilisant async attendent avec babel dans mon ReactJS projet. J'ai découvert un moyen pratique d'utilisation avec Réagissent setState que je voudrais juste mieux comprendre. Considérer ce code:
handleChange = (e) => {
this.setState({[e.target.name]: e.target.value})
console.log('synchronous code')
}
changeAndValidate = async (e) => {
await this.handleChange(e)
console.log('asynchronous validation code')
}
componentDidUpdate() {
console.log('updated component')
}
Mon intention est de l'asynchrone de validation de code à exécuter après que le composant est mis à jour. Et ça marche!!! L'résultant du journal de la console affiche:
synchronous code
updated component
asynchronous validation code
Le code de validation sera exécuté uniquement après handleChange a mis à jour l'état et le nouvel état est rendu.
Généralement d'exécuter du code après l'etat a mis à jour, vous devez utiliser un callback après ce.setState. Ce qui signifie que si vous voulez exécuter quoi que ce soit après handleChange, vous devez donner un rappel paramètre qui est ensuite transmis à setState. Pas assez. Mais dans l'exemple de code, en quelque sorte attendent sait que handleChange est terminée après que l'état a mis à jour... Mais je pensais attendre fonctionne uniquement avec des promesses et attend une promesse à résoudre avant de continuer. Theres aucune promesse et aucune résolution handleChange... Comment sait-elle que d'attendre??
L'implication semble être que setState est exécuté de manière asynchrone et attendent est en quelque sorte au courant de quand il se termine. Peut-être setState utilise des promesses à l'interne?
Versions:
réagir: "^15.4.2"
babel-core: "^6.26.0"
babel-preset-env: "^1.6.0",
babel-preset-réagir: "^6.24.1",
babel-preset-stade 0: "^6.24.1"
babel-plugin-système-import-transformateur: "^3.1.0",
babel-plugin-transformer-décorateurs-héritage: "^1.3.4",
babel-plugin-transformer-runtime: "^6.23.0"