GatsbyJS obtention des données d'API Restful
Je suis nouveau dans les deux Réagissent et GatsbyJS. Je suis confus et ne pouvait pas le faire comprendre d'une manière simple de charger des données provenant de tiers API Restful.
par exemple: je voudrais extraire des données à partir randomuser.me/API et ensuite être capable d'utiliser les données dans les pages.
Disons quelque chose comme ceci :
import React from 'react'
import Link from 'gatsby-link'
class User extends React.Component {
constructor(){
super();
this.state = {
pictures:[],
};
}
componentDidMount(){
fetch('https://randomuser.me/api/?results=500')
.then(results=>{
return results.json();
})
.then(data=>{
let pictures = data.results.map((pic,i)=>{
return(
<div key={i} >
<img key={i} src={pic.picture.medium}/>
</div>
)
})
this.setState({pictures:pictures})
})
}
render() {
return (<div>{this.state.pictures}</div>)
}
}
export default User;
Mais j'aimerais obtenir de l'aide de GraphQL pour filtre & tri de l'utilisateur et etc.....
Pourriez-vous svp m'aider à trouver un exemple de comment je peux récupérer les données et les insérer dans GraphQL sur gatsby-node.js
- Vous ne pouvez pas utiliser GatsbyJS de GraphQL de l'interface lors de l'exécution, seulement au moment de la construction. Vous pouvez, cependant, utiliser une bibliothèque tierce pour que si vous avez vraiment besoin GraphQL.
- Merci pour votre MP. mais je ne cherche pas à faire runtime GraphQL, pour une meilleure explication, je vérifie cet exemple github.com/gatsbyjs/gatsby/tree/master/examples/... . mais ce n'est qu'personnalisé pour API spécifique de contentful , là, je voudrais construire un semblable exemple pour charger des données à partir de n'importe quel API Restful . J'ai vérifier le GatsbyJS section plugin , il est plugin "gatsby-source-api", mais je ne pouvais pas le faire fonctionner ou d'exécuter dans mon exemple d'application
- Ces plugins, et les exemples sont destinés à être utilisés au moment de la construction (pas sur
componentDidMount()
, pas avecfetch
, je ne suis pas sûr si je m'expliquer clairement). Je crains que pour le moment il n'y a pas un plugin générique à utiliser pour personnalisé RESTE des appels d'API.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser GraphQL pour récupérer vos données, vous devez créer un sourceNode. La doc sur la création d'une source de plugin pourrait vous aider.
Suivez ces étapes pour être en mesure d'interroger randomuser de données avec graphQL dans votre Gatsby projet.
1) créer des nœuds dans gatsby-node.js
Dans votre dossier racine du projet, ajoutez ce code à
gatsby-node.js
:explication:
L'objectif est de créer chaque nœud pour chaque morceau de données que vous souhaitez utiliser.
Selon le createNode documentation, vous devez fournir un objet avec quelques champs requis (id, parent, intérieur, enfants).
Une fois que vous obtenez les résultats des données de la randomuser API, vous avez juste besoin de créer ce nœud d'objet et de le passer à la
createNode()
fonction.Ici, nous avons la carte pour les résultats que vous vouliez obtenir 500 randomusers
https://randomuser.me/api/?results=500
.créer le
userNode
objet avec le nécessaire et je voulais champs.Vous pouvez ajouter plus de champs en fonction de ce que les données que vous souhaitez utiliser dans votre application.
Il suffit de créer le nœud avec le
createNode()
fonction de l'Gatsby API.2) interroger vos données avec GraphiQL
Une fois que vous avez fait cela, exécutez
gatsby develop
et aller à http://localhost:8000/___graphql.Vous pouvez jouer avec graphiQL pour créer parfait de votre requête. Comme nous avons nommé le
internal.type
de notre objet de nœud'RandomUser'
, nous pouvons nous interrogerallRandomUser
pour obtenir nos données.3) utilisez cette requête dans votre gatsby page
Dans votre page, par exemple
src/pages/index.js
, utilisez la requête et l'affichage de vos données:Qui est !
https://randomuser.me/api
...il faut être connecté avec le serveur (par exemple, Express) qui est mis en place. J'ai essayé d'ajouter un proxy dans le package.json correspondant à l'adresse de serveur mais il ne fonctionne pasapp.get("/api-url", (req, res, next) => { /*get data*/ res.json(data) })
. Ensuite, vous serez en mesure d'utiliser votre api url dans votre gatsby-node.js fichier:https://myapp.com/api-url
.gatsby-node.js
n'est exécuté qu'à construction temps. Donc, la réponse serait non, ce ne serait pas mise à jour lors de l'exécutionMerci beaucoup, cela fonctionne bien pour moi, j'ai seulement changer de petites parties de l'gastbyjs-node.js parce qu'il fait une erreur lors de l'utilisation de la synchronisation & attendent, je pense que j'ai besoin de changer de section d'un processus de construction à l'utilisation babel pour me permettre d'utiliser la synchronisation ou l'attendent.
Voici le code qui fonctionne pour moi.
Les réponses données ci-dessus, à l'exception de la requête à l'étape 2 semble être la seule à revenir un nœud pour moi. Je peux retourner tous les nœuds en ajoutant totalCount comme un frère ou une sœur de bords. I. e.
{
allRandomUser {
totalCount
edges {
node {
id
gender
name {
first
last
}
}
}
}
}
La accepté de répondre pour que cela fonctionne très bien, juste à noter qu'il y a une dépréciation d'avertissement si vous utilisez
boundActionCreators
. Ce doit être renomméactions
pour éviter cet avertissement.