Comment gérer les fetch API AJAX de réponse à Réagir
Je fais une simple requête AJAX avec l'extraction de l'API de Réagir, en particulier dans le componentDidMount()
fonction.
Il est au travail, parce que la console s'affiche pour enregistrer le résultat. Cependant, je ne sais pas comment accéder à la réponse...
componentDidMount = () => {
let URL = 'https://jsonplaceholder.typicode.com/users'
fetch(URL)
.then(function(response) {
let myData = response.json()
return myData;
})
.then(function(json) {
console.log('parsed json', json)
})
.catch(function(ex) {
console.log('parsing failed', ex)
})
} //end componentDidMount
J'ai essayé d'accéder myData
en dehors de la méthode de récupération, mais cela déclenche une erreur en disant qu'il n'est pas défini. Donc, il est seulement accessible dans le champ d'application de la fonction.
J'ai ensuite essayé ceci:
.then(function(response) {
let myData = response.json()
//return myData;
this.setState({
data: myData
})
})
Ce temps, j'ai Cannot read property 'setState' of undefined(…)
Comment puis-je passer le chercher réponse à l'état, ou même simplement une variable globale?
Mise à JOUR
import React, { Component } from 'react';
import './App.css';
class App extends Component {
constructor(props) {
super(props);
this.state = {
data: null
}
}
componentDidMount() {
let URL = 'https://jsonplaceholder.typicode.com/users'
fetch(URL)
.then( (response) => {
let myData = response.json()
//return myData;
this.setState({
data: myData
})
})
.then( (json) => {
console.log('parsed json', json)
})
.catch( (ex) => {
console.log('parsing failed', ex)
})
console.log(this.state.data)
} //end componentDidMount
render() {
return (
<div className="App">
{this.state.data}
</div>
);
}
}
export default App;
OriginalL'auteur Paulos3000 | 2016-09-30
Vous devez vous connecter pour publier un commentaire.
Vous avez deux questions aussi loin que je peux voir,
response.json()
renvoie une promesse, vous ne voulez pas définirmyData
à la promesse, au lieu de résoudre en premier la promesse et ensuite vous pouvez accéder à vos données.Deuxième,
this
n'est pas dans le même champ d'application à l'intérieur de votre demande de récupération, de sorte que c'est pourquoi vous obtenez non défini, vous pouvez essayez d'enregistrer le champ d'application dethis
à l'extérieur de fetch:thnx beaucoup mec! j'ai perdu 3 heures pour la
OriginalL'auteur StackOverMySoul
setState est pas défini, parce que vous utilisez la fonction classique de la syntaxe à la place de la flèche de la fonction. Flèche fonction prend 'ce' mot-clé de "parent" de la fonction, un classique de la fonction() {} crée sa propre " ce " mot-clé.
Essayez cette
OriginalL'auteur Tomasz Nowak
Vous êtes sur la bonne voie avec
this.setState
cependantthis
n'est plus dans le cadre de la composante lorsque vous appelez à l'intérieur de la fonction de la manipulation de la réponse. À l'aide d'un=>
fonction maintient le contexte dethis
.Vous êtes toujours référencement
this
dans le contexte de la réponse de gestionnaire et non dans le contexte de la composante. Vous devez lier le composant à votre fonction ou l'utilisation d'une graisse flèche de la fonction, afin de maintenir le contexte de cette.- Je voir votre mise à jour. Vous avez déclaré que
componentDidMount
avec une flèche de la fonction. Essentiellement, cela signifie que les pauses de votre composant, parce que maintenantthis
à l'intérieur de la flèche fonction n'est plus dans le cadre de la composante. Vous devez le déclarer commecomponentDidMount() {}
comme vous l'avez fait avant. La réponse du gestionnaire de l'extraction de réponse est celui que l'on doit utiliser la flèche de la fonction.Ne fonctionne toujours pas :/ Ont changé ma mise à jour...
myData
tient encore lanull
valeur que j'ai déclaré dans l'état d'initialisation...Avez-vous essayé de rendu
this.state.data
dans votrerender()
méthode? Une fois que vous appelezthis.setState({data: myData})
, il va déclencher un rendu de votre composant. Aussi, si vous utilisez google Chrome, vous pouvez déboguer ce à l'aide de l'Réagissent extension Chrome Devtools. Il vous permettra de voir l'état de votre composant après l'appel àthis.setState({data: myData})
.OriginalL'auteur Patrick Grimard
RÉAGIR NATIF
FICHIER JSON
créer un fichier replymsg.json et de mettre ci-dessous le contenu et il devrait hôte à hôte local comme : http://localhost/replymsg.json
OriginalL'auteur Brijmohan Karadia
Changer la façon dont vous accédez à des données de réponse en utilisant '=>' à la place de la fonction dans le même contexte.
OriginalL'auteur Ye Yint
Vous devez lier contexte actuel de la fonction cible
OriginalL'auteur Floyd