state = { locationData: {} } componentDidMount() { axios.get('...') .then(res => { const data = res.data; parseString(data, function (err, result) { this.setState({locationData: result.data[0]}, function(){console.log(this.state.locationData);}) }); }) } Gives me the error:Uncaught (in promise) TypeError: Cannot read property 'setState' of undefinedI've found I need to bind but I don't understand how to in this instance.
3 Réponses :
Vous pouvez modifier la fonction (err, résultat) {...} dans (err, résultat) => {...} Depuis la fonction arrow Ne possédez pas cette propriété. P>
Comme indiqué dans les commentaires, vous pouvez simplement ajouter .bind (this) code> après le corps de la fonction. En règle générale, je pense que les méthodes d'appel sur les fonctions de rappel ne sont pas très lisibles, ma recommandation serait donc de changer votre rappel à une flèche ou de définir le rappel à l'extérieur et de le transmettre en tant qu'argument.
Le problème est dû à une perte de contexte à l'intérieur du rappel de la fonction code> parsestring code>.
Utilisez les fonctions de flèche: p> ou lié this this: p>
Il suffit d'ajouter
.bind (this) code> après
parsestring code> du corps de rappel ou utilisez la fonction de flèche.
Pourriez-vous fournir le code code> parsestring code>?
Cela ne semblait pas avoir d'effet ...
Compte tenu de votre titre de question, je veux juste souligner que le message d'erreur indique explicitement que
ce code> est indéfini, pas
SETState code> ou "Etat de réaction"; Ce qui devrait vous avoir amené au fait que
ceci code> à l'intérieur de la fonction
code> n'est plus une référence à votre instance de composant. Et Google the Error Leads ici:
double possible de React - uncaught TypeError: Impossible de lire la propriété 'setState' de indéfini