-2
votes

Etat de réaction indéfini dans Axios Obtenir la demande

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.

5 commentaires

Il suffit d'ajouter .bind (this) après parsestring du corps de rappel ou utilisez la fonction de flèche.


Pourriez-vous fournir le code parsestring ?


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 est indéfini, pas SETState ou "Etat de réaction"; Ce qui devrait vous avoir amené au fait que ceci à l'intérieur de la fonction 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


3 Réponses :


0
votes

Vous pouvez modifier la fonction (err, résultat) {...} dans (err, résultat) => {...} Depuis la fonction arrow Ne possédez pas cette propriété.


0 commentaires

1
votes

Comme indiqué dans les commentaires, vous pouvez simplement ajouter .bind (this) 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.

première approche xxx

deuxième approche xxx


0 commentaires

1
votes

Le problème est dû à une perte de contexte à l'intérieur du rappel de la fonction parsestring .

Utilisez les fonctions de flèche: xxx

ou lié this this: xxx


0 commentaires