J'essaie d'obtenir mon résultat JSON dans mon code de réaction
Le code ressemble à ceci
_getComments() {
const commentList = "AJAX JSON GOES HERE"
return commentList.map((comment) => {
return (
<Comment
author={comment.author}
body={comment.body}
avatarUrl={comment.avatarUrl}
key={comment.id} />);
});
}
Comment puis-je récupérer AJAX dans ceci?
First, pour récupérer les données avec AJAX, vous avez quelques options:
Next, vous devez l’utiliser quelque part dans votre composant React. Cela dépend de votre application et de votre composant, mais généralement je pense qu'il y a deux scénarios à considérer:
La récupération des données initiales doit être effectuée selon la méthode du cycle de vie componentDidMount()
. À partir de Documents de réaction :
var UserGist = React.createClass({
getInitialState: function() {
return {
username: '',
lastGistUrl: ''
};
},
componentDidMount: function() {
this.serverRequest = $.get(this.props.source, function (result) {
var lastGist = result[0];
this.setState({
username: lastGist.owner.login,
lastGistUrl: lastGist.html_url
});
}.bind(this));
},
componentWillUnmount: function() {
this.serverRequest.abort();
},
render: function() {
return (
<div>
{this.state.username}'s last Gist is
<a href={this.state.lastGistUrl}>here</a>.
</div>
);
}
});
ReactDOM.render(
<UserGist source="https://api.github.com/users/octocat/gists" />,
mountNode
);
Ici, ils utilisent jQuery pour récupérer les données. Bien que cela fonctionne très bien, ce n’est probablement pas une bonne idée d’utiliser une aussi grande bibliothèque (en termes de taille) pour effectuer une tâche aussi petite.
Récupération de données en réponse à, par exemple, une action peut être faite comme ceci:
var UserGist = React.createClass({
getInitialState: function() {
return {
users: []
};
},
componentWillUnmount: function() {
this.serverRequest && this.serverRequest.abort();
},
fetchNewUser: function () {
this.serverRequest = $.get(this.props.source, function (result) {
var lastGist = result[0];
var users = this.state.users
users.Push(lastGist.owner.login)
this.setState({ users });
}.bind(this));
},
render: function() {
return (
<div>
{this.state.users.map(user => <div>{user}</div>)}
<button onClick={this.fetchNewUser}>Get new user</button>
</div>
);
}
});
ReactDOM.render(
<UserGist source="https://api.github.com/users/octocat/gists" />,
mountNode
);
Jetons un coup d'oeil sur l'API de récupération: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Disons que nous voulons extraire une simple liste dans notre composant.
export default MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
lst: []
};
this.fetchData = this.fetchData.bind(this);
}
fetchData() {
fetch('url')
.then((res) => {
return res.json();
})
.then((res) => {
this.setState({ lst: res });
});
}
}
Nous récupérons les données du serveur, nous obtenons le résultat du service, nous convertissons en json, puis nous définissons le résultat qui sera le tableau dans l'état.
Vous pouvez utiliser jQuery.get
ou jQuery.ajax
dans composantDidMount:
import React from 'react';
export default React.createClass({
...
componentDidMount() {
$.get('your/url/here').done((loadedData) => {
this.setState({data: loadedData});
});
...
}