GatsbyJS从Restful API获取数据

我是React和GatsbyJS的新手。我很困惑,无法以一种简单的方式弄清楚如何从第三方Restful API加载数据。

例如,我想从randomuser.me/API获取数据,然后能够使用页面中的数据。

我们这样说:

  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;

但是我想得到GraphQL的帮助,以便对用户进行过滤和排序等。

您能否帮助我找到如何获取数据并将其插入GraphQL的示例gatsby-node.js

回答:

如果您想使用GraphQL来获取数据,则必须创建一个sourceNode。有关创建源插件的文档可以为您提供帮助。

请按照以下步骤操作,以使用randomuserGatsby项目中的GraphQL 查询数据。

回答:

在您的根项目文件夹中,将此代码添加到gatsby-node.js

const axios = require('axios');

const crypto = require('crypto');

exports.sourceNodes = async ({ boundActionCreators }) => {

const { createNode } = boundActionCreators;

// fetch raw data from the randomuser api

const fetchRandomUser = () => axios.get(`https://randomuser.me/api/?results=500`);

// await for results

const res = await fetchRandomUser();

// map into these results and create nodes

res.data.results.map((user, i) => {

// Create your node object

const userNode = {

// Required fields

id: `${i}`,

parent: `__SOURCE__`,

internal: {

type: `RandomUser`, // name of the graphQL query --> allRandomUser {}

// contentDigest will be added just after

// but it is required

},

children: [],

// Other fields that you want to query with graphQl

gender: user.gender,

name: {

title: user.name.title,

first: user.name.first,

last: user.name.last,

},

picture: {

large: user.picture.large,

medium: user.picture.medium,

thumbnail: user.picture.thumbnail,

}

// etc...

}

// Get content digest of node. (Required field)

const contentDigest = crypto

.createHash(`md5`)

.update(JSON.stringify(userNode))

.digest(`hex`);

// add it to userNode

userNode.internal.contentDigest = contentDigest;

// Create node with the gatsby createNode() API

createNode(userNode);

});

return;

}

我曾经axios获取数据,所以您需要安装它:npm install --save axios

说明:

目标是为要使用的每个数据创建每个节点。根据createNode文档,您必须为对象提供一些必填字段(id,parent,internal,children)。

从randomuser API获取结果数据后,只需创建此节点对象并将其传递给createNode()函数即可。

在这里,我们映射到您想要获得500个随机用户的结果https://randomuser.me/api/?results=500

userNode使用必填字段和所需字段创建对象。您可以根据要在应用程序中使用的数据添加更多字段。

只需使用createNode()Gatsby API 的功能创建节点。

回答:

完成后,运行gatsby develop并转到http:// localhost:8000 / ___

graphql。

您可以使用GraphQL创建完美的查询。当我们将internal.type节点对象命名为时'RandomUser',我们可以进行查询allRandomUser以获取数据。

{

allRandomUser {

edges {

node {

gender

name {

title

first

last

}

picture {

large

medium

thumbnail

}

}

}

}

}

回答:

例如src/pages/index.js,在您的页面中,使用查询并显示您的数据:

import React from 'react'

import Link from 'gatsby-link'

const IndexPage = (props) => {

const users = props.data.allRandomUser.edges;

return (

<div>

{users.map((user, i) => {

const userData = user.node;

return (

<div key={i}>

<p>Name: {userData.name.first}</p>

<img src={userData.picture.medium} />

</div>

)

})}

</div>

);

};

export default IndexPage

export const query = graphql`

query RandomUserQuery {

allRandomUser {

edges {

node {

gender

name {

title

first

last

}

picture {

large

medium

thumbnail

}

}

}

}

}

`;

这就对了!

以上是 GatsbyJS从Restful API获取数据 的全部内容, 来源链接: utcz.com/qa/425165.html

回到顶部