GatsbyJS abrufen von Daten aus Restful API
Ich bin neu in beiden Reagieren und GatsbyJS. Ich bin verwirrt und konnte nicht machen, herauszufinden, eine einfache Möglichkeit, Daten zu laden, die von Dritten Restful API.
Beispiel: ich möchte zum abrufen von Daten aus randomuser.mir/API und dann in der Lage sein, die Daten in Seiten.
Sagen wir so etwas wie dieses :
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;
Aber ich möchte die Hilfe von GraphQL um filter & Sortieren von Benutzer-und etc.....
Könnten Sie mir bitte helfen zu finden, die Probe zu wie kann ich Daten abrufen und legen Sie Sie in GraphQL auf gatsby-node.js
- Sie können nicht verwenden GatsbyJS ist GraphQL Schnittstelle zur Laufzeit, nur zur build-Zeit. Sie können jedoch, verwenden Sie eine Drittanbieter-Bibliothek für Sie, wenn Sie wirklich brauchen, GraphQL.
- Danke für deine PM. aber ich bin nicht auf der Suche, um Laufzeit GraphQL, für eine bessere Erklärung, ich check das Beispiel github.com/gatsbyjs/gatsby/tree/master/examples/... . aber dies ist nur individuell auf bestimmte API von gehaltvollen , dort würde ich gerne bauen ein ähnliches Beispiel zum laden von Daten aus beliebigen Restful API . Ich check das GatsbyJS plugin-Sektion gibt es plugin 'gatsby-source-api', aber ich konnte nicht damit es funktioniert, oder führen Sie in meinem Beispiel-Anwendung
- Die plugins und Beispiele verwendet werden sollen zur build-Zeit (nicht auf
componentDidMount()
, nicht mitfetch
ich bin mir nicht sicher, ob ich mich erklären, klar). Ich fürchte, für den moment gibt es nicht ein generisches plugin zu verwenden für kundenspezifische REST-API-Aufrufe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie verwenden möchten GraphQL zu Holen Ihre Daten, die Sie haben, um eine sourceNode. Der doc über erstellen Sie ein source-plugin konnte dir helfen.
Gehen Sie folgendermaßen vor, um in der Lage, Abfrage randomuser Daten mit graphQL in Ihrer Gatsby Projekt.
1) erzeugen der Knoten in gatsby-node.js
In Ihrem root-Ordner Projekt, fügen Sie diesen code
gatsby-node.js
:Erklärung:
Ziel ist jeder Knoten für jedes Stück von Daten verwenden möchten.
Nach der createNode Dokumentation, Sie haben, um ein Objekt mit wenigen erforderlichen Felder (id, Eltern, innere Kinder).
Sobald Sie die Ergebnisse, die Daten aus der randomuser API, Sie müssen nur zu erstellen, das node-Objekt und übergeben es an die
createNode()
Funktion.Hier, die wir anzeigen, um die Ergebnisse, wie Sie wollte 500 randomusers
https://randomuser.me/api/?results=500
.erstellen der
userNode
- Objekt mit den erforderlichen und wollte Felder.Sie können fügen Sie weitere Felder, je nachdem, welche Daten Sie verwenden möchten, in Ihrer app.
Erstellen Sie einfach die Knoten mit der
createNode()
Funktion der Gatsby-API.2) Abfrage Ihrer Daten mit GraphiQL
Sobald Sie das getan, laufen
gatsby develop
und gehen Sie zu http://localhost:8000/___graphql.Können Sie spielen mit graphiQL erstellen Ihre perfekte Abfrage. Als wir den Namen der
internal.type
unserer Knoten-Objekt'RandomUser'
können wir die AbfrageallRandomUser
um unsere Daten.3) verwenden Sie diese Abfrage in Ihrer gatsby Seite
In Ihre Seite ein, zum Beispiel
src/pages/index.js
verwenden Sie die Abfrage und Anzeige Ihrer Daten:Dass ist es !
https://randomuser.me/api
...es sollte mit dem server verbunden werden (z.B. Express), das eingerichtet ist. Ich versucht, um einen proxy in dem Paket.json-matching-server-Adresse, aber es funktioniert nichtapp.get("/api-url", (req, res, next) => { /*get data*/ res.json(data) })
. Dann werden Sie in der Lage zu verwenden Sie Ihren api-urls in gatsby-node.js - Datei:https://myapp.com/api-url
.Vielen Dank, das funktioniert gut für mich, ich ändern Sie nur kleine Teile des gastbyjs-node.js da macht es einen Fehler bei der Nutzung von sync & erwarten, ich denke, ich muss einiges ändern Abschnitt eines build-Prozesses zu verwenden, babel, mir zu erlauben, verwenden, synchronisieren oder zu erwarten.
Hier ist der code, der funktioniert für mich.
Antworten über Arbeit, außer der Abfrage in Schritt 2 scheint nur ein Knoten für mich. Ich kann wieder alle Knoten durch hinzufügen totalCount als Geschwister von Kanten. I. e.
{
allRandomUser {
totalCount
edges {
node {
id
gender
name {
first
last
}
}
}
}
}