网易首页 > 网易号 > 正文 申请入驻

使用React、Apollo和GraphQL创建应用:获取数据和处理分步的指南

0
分享至

关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。

您是否希望构建具有可扩展、数据驱动的用户界面的现代 Web 应用程序?那么这篇文章适合你。在本分步指南中,我将引导您完成在 React 应用程序中使用 Apollo Client 从 GraphQL 端点获取数据所需的步骤,以及如何处理在此过程中可能发生的错误。
介绍
如果您不熟悉这些术语:
GraphQL是一种强大的 API(应用程序编程接口)查询语言,由 Facebook 开发。它为构建现代 Web 应用程序提供了一种比 REST API(具象状态传输应用程序编程接口)更高效、更强大、更灵活的替代方案。使用 GraphQL,客户端无需从服务器请求预定义的数据结构,而是可以准确指定他们需要的数据并接收与其请求匹配的 JSON(JavaScript 对象表示法)对象。这意味着您可以只检索所需的数据,从而减少网络流量并提高性能。请参阅文档
Apollo Client是一个 JavaScript 库,它提供了一种从客户端应用程序与 GraphQL API 交互的方法。它允许您从 GraphQL 服务器获取数据,将其缓存在本地,并在您的应用程序中管理其状态。它提供了一种简单灵活的方式来使用 GraphQL 查询和修改数据,从而轻松构建强大的、数据驱动的用户界面。请参阅文档
先决条件
您需要具备 React 和 JavaScript 的一些基本知识。
设置环境
在我们开始之前,让我们确保我们已经安装了必要的工具和库。我们将使用 create-react-app 来创建一个新的 React 项目,并使用 Apollo Client 来查询我们的 GraphQL 端点。
npx create-react-app my-app
cd my-app
npm install @apollo/client graphql
定义 GraphQL 端点
要从 GraphQL API 获取数据,我们需要定义我们将向其发出请求的端点。对于此示例,我们将使用以下端点:
https://countries.trevorblades.com/graphql
设置阿波罗客户端
接下来,我们将在 index.js 文件中设置 Apollo Client,并使用 Apollo Provider 包装我们的 App 组件。我们的 index.js 文件应该是这样的:
import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
const client = new ApolloClient({
uri: 'https://countries.trevorblades.com/graphql',
cache: new InMemoryCache(),
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
此代码创建一个新的 ApolloClient 实例,并将 URI 设置为我们的 GraphQL 端点。它将我们的应用程序包装在 ApolloProvider 中,将客户端对象作为道具传递。您可能想知道为什么是“uri”(统一资源标识符)而不是“url”(统一资源定位器),这是因为在 Apollo Client 的上下文中,“uri”指的是客户端将连接到的 GraphQL 服务器的位置为了获取数据。这可能是因为 URI 不仅包括服务器的位置,还包括其他详细信息,例如协议和任何查询参数,而 URL 专门指资源的位置。
创建查询组件
现在我们已经设置了 GraphQL 端点和 Apollo Client,我们现在可以从 API 获取数据。在我们的 App.js 文件中粘贴以下代码:
import { useQuery, gql } from '@apollo/client';
const GET_LOCATIONS = gql`
query GetLocations {
country(code: "BR") { //Add your query here
name
native
capital
emoji
currency
languages {
code
name


const App = () => {
const { loading, error, data } = useQuery(GET_LOCATIONS);
const {name, currency, capital, native, emoji, languages} = data?.country || {};
if (loading) return

Loading...


if (error) return

Error: {error.message}


return (


Let's Know Our Countries
Country: {name}
About this location:


  1. Capital is known as {capital}
  2. Its symbol is {emoji}
  3. Its native is {native}
  4. Currency: {currency}
    {languages?.map((lang) => (

    1. Language: {lang.name}
    2. Code: {lang.code}



export default App;
此代码使用 Apollo Client 中的 useQuery 挂钩将 GraphQL 查询作为其参数并返回一个包含该查询的数据、加载和错误状态的对象。在这种情况下,查询是使用 gql 模板文字函数定义的,并分配给一个名为 GET_LOCATIONS 的变量。
然后,App 组件以 GET_LOCATIONS 作为参数调用 useQuery,并解构生成的加载、错误和数据状态。数据状态被进一步解构,以从 GraphQL 响应中获取名称、货币、资本、本地、表情符号和语言字段。它还处理加载和错误状态,并在加载数据后返回要显示的 UI。
运行应用程序
最后,我们可以运行我们的应用程序来查看代码的结果。在您的终端中运行以下命令:
npm start
这将启动开发服务器并在您的 Web 浏览器中打开一个显示该应用程序的新选项卡。它应该看起来像这样。

呈现的 GraphQl UI
结论
恭喜!在本文中,我们介绍了在 React 应用程序中使用 Apollo Client 从 GraphQL API 获取数据的过程,以及如何处理在此过程中可能发生的错误。有了这些知识,您就可以开始自己构建强大的、数据驱动的用户界面。编码愉快!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
CCTV5直播,中国男篮VS卡塔尔队,能否翻越三座大山,全力以赴!

CCTV5直播,中国男篮VS卡塔尔队,能否翻越三座大山,全力以赴!

体坛小快灵
2026-08-19 10:28:34
2027款丰田凯美瑞上市 售17.18-20.98万元

2027款丰田凯美瑞上市 售17.18-20.98万元

车质网
2026-08-19 13:02:07
无意中在女同事车上发现的,这是用来干嘛的?

无意中在女同事车上发现的,这是用来干嘛的?

舞指飞扬
2026-08-18 11:50:15
知名男演员自曝23岁在北京买房,当年房价8000元一平方米,五六年后提前还清贷款

知名男演员自曝23岁在北京买房,当年房价8000元一平方米,五六年后提前还清贷款

天津美食全搜罗
2026-08-19 11:41:32
最令大龄剩女崩溃的瞬间是什么?网友:谁都知道去菜市场上买菜要买新鲜的

最令大龄剩女崩溃的瞬间是什么?网友:谁都知道去菜市场上买菜要买新鲜的

带你感受人间冷暖
2026-08-17 00:05:20
一语成谶!杭州酒局上的悲剧:张雪峰早提醒过的职场困境,还是上演了

一语成谶!杭州酒局上的悲剧:张雪峰早提醒过的职场困境,还是上演了

火山詩话
2026-08-19 12:50:50
我国超5亿人有颈动脉斑块!研究证实:斑块可以消退!有6点建议

我国超5亿人有颈动脉斑块!研究证实:斑块可以消退!有6点建议

医学科普汇
2026-08-18 20:55:08
大争议!爱德华兹认为杜兰特是GOAT 硬荣誉远逊乔丹詹姆斯

大争议!爱德华兹认为杜兰特是GOAT 硬荣誉远逊乔丹詹姆斯

醉卧浮生
2026-08-19 07:35:44
2026年8月业界新人大赏

2026年8月业界新人大赏

吃瓜党二号头目
2026-08-19 11:54:51
赫马拉退出军界出任国防部长,费多罗夫呼吁乌克兰举行大选

赫马拉退出军界出任国防部长,费多罗夫呼吁乌克兰举行大选

山河路口
2026-08-19 11:23:48
被谩骂的武磊球迷手拿申花扇子!韩乔生怒批申花球迷:算什么东西

被谩骂的武磊球迷手拿申花扇子!韩乔生怒批申花球迷:算什么东西

风过乡
2026-08-19 11:42:05
1968年,64岁的王耀武在北京病逝,他永远不知,自家女儿有多厉害

1968年,64岁的王耀武在北京病逝,他永远不知,自家女儿有多厉害

老媹古装影视解说
2026-08-19 11:36:50
没想到,小泉拜完靖国神社,首个出来指责的不是中方,竟是自家人

没想到,小泉拜完靖国神社,首个出来指责的不是中方,竟是自家人

云上乌托邦
2026-08-19 13:53:42
拼多多存在的意义具象化了,网友:没有比这个更震撼想哭的了!

拼多多存在的意义具象化了,网友:没有比这个更震撼想哭的了!

另子维爱读史
2026-08-18 21:06:29
他逃亡16年,靠赃款娶4个漂亮老婆生12个娃,被捕时身家有几个亿

他逃亡16年,靠赃款娶4个漂亮老婆生12个娃,被捕时身家有几个亿

阿伧说事
2026-08-19 10:18:25
“叛徒”艇长投俄12年后被炸死,炸死他的应召女郎被捕

“叛徒”艇长投俄12年后被炸死,炸死他的应召女郎被捕

桂系007
2026-08-17 00:21:19
电影《牛来》进入2026年国产动画票房榜前10

电影《牛来》进入2026年国产动画票房榜前10

界面新闻
2026-08-16 16:07:00
与影帝离婚,她带俩儿子回上海娘家住大别墅,如今43岁美出新高度

与影帝离婚,她带俩儿子回上海娘家住大别墅,如今43岁美出新高度

草莓信箱
2026-08-19 01:19:49
靖国神社起冲突!台湾男子举反华标语,却被日本右翼围攻10分钟不止?

靖国神社起冲突!台湾男子举反华标语,却被日本右翼围攻10分钟不止?

浯江孤舟
2026-08-18 12:26:05
才3年,曼城23年欧冠决赛首发仅哈兰德、鲁本和格拉利什留队

才3年,曼城23年欧冠决赛首发仅哈兰德、鲁本和格拉利什留队

懂球帝
2026-08-19 01:10:11
2026-08-19 16:16:49
牛马科技
牛马科技
业务数码玩家.无聊的博主
6213文章数 619关注度
往期回顾 全部

科技要闻

宇树科技1100元开盘,较发行价上涨629%

头条要闻

武汉百年历史建筑被刷成金色 涉事黄金店已被责令整改

头条要闻

武汉百年历史建筑被刷成金色 涉事黄金店已被责令整改

体育要闻

在国际球探眼中,中国年轻球员是什么水平?

娱乐要闻

230万变3亿,章子怡活成自己的靠山

财经要闻

内部反腐,让大疆错过宇树250亿收益?

汽车要闻

小米澎程N70体验 后排空间夸张亦可旋转对坐

态度原创

游戏
健康
家居
亲子
军事航空

血染黑白世界!战棋肉鸽《血色序曲》9月11日EA开启

女孩更易侧弯?几类孩子风险偏高

家居要闻

2026建博会(广州) 公装联探展交流活动

亲子要闻

小姨带娃,不看不知道,一看吓一跳

军事要闻

美国防部:正在落实总统缩减美韩军演指令

无障碍浏览 进入关怀版