gpt4 book ai didi

reactjs - GatsbyJS 从 Restful API 获取数据

转载 作者:行者123 更新时间:2023-12-03 12:58:19 24 4
gpt4 key购买 nike

我是 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 的帮助来过滤和排序用户等等......

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

最佳答案

如果您想使用 GraphQL 来获取数据,则必须创建一个 sourceNode。关于 creating a source plugin 的文档可以帮助你。

按照以下步骤操作,即可在 Gatsby 项目中使用 GraphQL 查询 randomuser 数据。

1) 在 gatsby-node.js 中创建节点

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

const axios = require('axios');
const crypto = require('crypto');

exports.sourceNodes = async ({ actions }) => {
const { createNode } = actions;

// 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;
}

I used axios to fetch data so you will need to install it: npm install --save axios

说明:

目标是为您要使用的每条数据创建每个节点。根据createNode documentation ,您必须提供一个具有很少必填字段(id、parent、internal、children)的对象。

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

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

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

只需使用 Gatsby API 的 createNode() 函数创建节点即可。

2) 使用 GraphQL 查询数据

完成此操作后,运行 gatsbydevelop 并转到 http://localhost:8000/___graphql .

您可以使用 GraphQL 来创建完美的查询。由于我们将节点对象的 internal.type 命名为 'RandomUser',因此我们可以查询 allRandomUser 来获取数据。

{
allRandomUser {
edges {
node {
gender
name {
title
first
last
}
picture {
large
medium
thumbnail
}
}
}
}
}

3) 在您的 Gatsby 页面中使用此查询

在您的页面(例如 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
}
}
}
}
}
`;

就是这样!

关于reactjs - GatsbyJS 从 Restful API 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49299309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com