使用 React 开发 GraphQL Web 应用的最佳实践

GraphQL 是一种用于 API 的查询语言,可以让客户端精确地指定需要的数据。React 是目前最受欢迎的前端框架之一,它提供了构建交互式用户界面所需的工具。当这两种技术结合使用时,可以创建出高效、灵活和易于维护的 Web 应用。

本文将介绍使用 React 和 GraphQL 开发 Web 应用的最佳实践。我们将从创建一个 GraphQL API 开始,然后使用 React 来处理和展示数据。我们将讨论如何使用 Apollo 客户端来管理查询和状态,如何使用 GraphQL 的模式(Schema)和类型系统,以及如何处理复杂的查询和变异。

创建 GraphQL API

首先,我们需要创建一个 GraphQL API 以便从客户端访问数据。我们可以使用任何支持 GraphQL 的服务,比如 AWS AppSyncHasura,或者自己构建一个 GraphQL 服务器。在这里,我们将使用 Apollo Server 来创建我们的 GraphQL API。

安装 Apollo Server

我们可以使用 npm 来安装 Apollo Server:

--- ------- -------------

创建 Schema

在创建 GraphQL API 时,首先需要定义一个 Schema,它描述了可用的查询和变异。我们可以使用 GraphQL 的 Schema Definition Language (SDL) 来定义 Schema。以下是一个简单的示例:

---- ----- -
  ------ ------
-

---- -------- -
  ------------------- --------- ------
-

------ -
  ------ -----
  --------- --------
-

这个 Schema 定义了一个名为 hello 的查询字段,它返回一个字符串。还定义了一个名为 addMessage 的变异字段,它接受一个字符串作为参数,并返回一个字符串。

创建 Resolvers

Schema 定义了可用的查询和变异,但是我们还需要一个 Resolver 函数来处理这些查询和变异。Resolver 函数是执行实际查询或变异逻辑的地方。

以下是 Resolver 函数的示例:

----- --------- - -
  ------ -
    ------ -- -- ------ --------
  --
  --------- -
    ----------- -------- - ------- -- -- -
      -- ---------
      ------ --------
    --
  --
--

这个 Resolver 函数实现了 hello 查询和 addMessage 变异的逻辑。在这里,我们只是返回一些硬编码的值。

启动 Apollo Server

现在我们可以启动 Apollo Server,并将 Schema 和 Resolvers 传递给它:

----- - ------------ - - -------------------------

----- -------- - -
  ---- ----- -
    ------ ------
  -

  ---- -------- -
    ------------------- --------- ------
  -

  ------ -
    ------ -----
    --------- --------
  -
--

----- --------- - -
  ------ -
    ------ -- -- ------ --------
  --
  --------- -
    ----------- -------- - ------- -- -- -
      -- ---------
      ------ --------
    --
  --
--

----- ------ - --- -------------- --------- --------- ---

----------------------- --- -- -- -
  ------------------- ----- -- ---------
---

现在我们可以通过 http://localhost:4000 访问 GraphQL API。在浏览器中打开该 URL,会看到我们定义的 hello 查询和 addMessage 变异。

使用 React 和 Apollo 客户端

现在我们已经创建了一个 GraphQL API,可以从客户端访问它。我们将使用 React 和 Apollo 客户端来处理和展示数据。

安装 React 和 Apollo 客户端

我们可以使用 npm 安装 React 和 Apollo 客户端:

--- ------- ----- ------------ ------------------- -------

创建 Apollo 客户端

首先,我们需要创建一个 Apollo 客户端来处理我们的 GraphQL 查询和变异。我们可以使用 Apollo Boost 来快速设置一个默认配置的客户端:

------ ------------ ---- ---------------

----- ------ - --- --------------
  ---- ------------------------
---

在 React 中使用 Apollo 客户端

现在,我们可以将客户端传递给 React,并使用 useQueryuseMutation 钩子来处理 GraphQL 查询和变异。

以下是一个基本的组件,它可以查询并展示 hello 查询的结果:

------ ----- ---- --------
------ - -------- - ---- ----------------------
------ --- ---- --------------

----- ----------- - ----
  ----- -
    -----
  -
--

-------- ----- -
  ----- - -------- ------ ---- - - ----------------------

  -- --------- ------ ------------------
  -- ------- ------ -------- -------

  ------ ----------------------
-

------ ------- ----

在这里,我们使用 useQuery 钩子来执行 HELLO_QUERY 查询。如果正在加载查询,则显示 "Loading...",如果有错误,则显示 "Error :("。否则,我们将展示返回的字符串。

以下是一个基本的组件,它可以添加一条消息:

------ ------ - -------- - ---- --------
------ - ----------- - ---- ----------------------
------ --- ---- --------------

----- -------------------- - ----
  -------- -------------------- -------- -
    ------------------- ---------
  -
--

-------- ------------ -
  ----- --------- ----------- - -------------
  ----- ------------ - --------------------------------- -
    ---------- - ------- --
    ------- ------- - ----- - ---------- - -- -- -
      ----------------- ----- - --------- ---------- - ---
    --
  ---

  -------- --------------- -
    -------------------
    -------------
  -

  -------- --------------- -
    ---------------------------
  -

  ------ -
    ----- ------------------------
      ------ --------------- ----------------------- --
      ------- ----------------- ----------------
    -------
  --
-

------ ------- -----------

在这里,我们使用 useMutation 钩子来执行 ADD_MESSAGE_MUTATION 变异。我们将 message 变量作为变异的参数传递,然后在 update 回调函数中更新 Apollo 缓存以反映刚刚添加的消息。

完成了数据的获取和处理后,我们可以在 React 组件中使用这些数据。

总结

本文中,我们介绍了使用 React 和 GraphQL 开发 Web 应用的最佳实践。我们创建了一个 GraphQL API,并使用 Apollo 客户端来处理查询和变异。我们还讨论了使用 GraphQL 的模式和类型系统,以及如何处理复杂的查询和变异。最后,我们将数据传递给 React 组件并展示它们。

如果您刚开始学习 React 和 GraphQL,这些示例可能有点复杂。但是一旦你掌握了这些技术,你将可以轻松地构建出高效、灵活和易于维护的 Web 应用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64a77c7c48841e98943fceae


猜你喜欢

  • 使用 Vue CLI 3 构建 SPA 应用的经验总结

    在前端开发中,Vue.js 的出现让我们的开发变得更加便捷和高效。而 Vue CLI 3 是一个官方提供的脚手架工具,可以快速搭建 Vue.js 项目,让我们可以更加专注于业务代码的编写。

    1 年前
  • 使用工具自动化生成 PWA 应用的 Service Worker

    随着移动互联网的普及,Web 应用的用户体验越来越成为了前端开发人员关注的重点。而 PWA(Progressive Web App)应用则是近年来备受瞩目的一种 Web 应用形式,它能够让我们通过技术...

    1 年前
  • 基于 Swagger2 构建 RESTful API 文档

    RESTful API 是前端开发中不可或缺的一部分,而文档是保证交流和协作的重要方式。Swagger2 是一款开源的API文档生成工具,它可以帮助我们快速构建 RESTful API 文档,提高交流...

    1 年前
  • Cypress 测试框架中如何使用代理进行测试

    Cypress 是一种现代化的前端测试框架,它以简单的方式执行端到端测试,使得测试更快、更易于编写和维护。它不仅支持 UI 测试,还支持 API 测试,可以模拟网络请求、操纵浏览器、绕过身份验证等。

    1 年前
  • SASS 中 @keyframes 规则的使用方法及注意事项(附例子)

    SASS 中 @keyframes 规则的使用方法及注意事项(附例子) 在前端开发中,动画效果往往是一个重要的设计元素。为了实现一些比较复杂的动画效果,SASS 提供了 @keyframes 规则。

    1 年前
  • 通过 ARIA 标准实现无障碍设计的前端技巧

    随着人们对无障碍设计的认识越来越深入,通过 ARIA 标准实现无障碍设计已经成为了前端开发中不可或缺的技巧之一。本文将介绍如何使用 ARIA 标准来实现无障碍设计,并提供详细的指导和示例代码。

    1 年前
  • 使用 Chai.js 和 Mocha.js 进行 TDD 测试

    TDD (测试驱动开发) 是一种软件开发方式,在写代码之前先编写单元测试,然后再在这些测试的基础上写代码。这种方式可以帮助我们更好的理解需求和设计,加快开发速度,同时提高代码质量。

    1 年前
  • SSE 服务端端口占用:识别与解决

    在前端开发中,SSE(Server-Sent Events)是一种用于从服务器向客户端推送事件的技术,使用 SSE 可以有效减少网络请求和数据传输次数,提高前端页面性能和用户体验。

    1 年前
  • 如何在 Drupal 8 中进行响应式图片设备预加载!

    在当前的网络环境中,网页加载速度已经成为了一个重要的指标。而图像作为网页中的重要元素之一,对页面的加载速度有着很大的影响。为了提高网页的加载速度,我们需要对网页的图片进行优化。

    1 年前
  • 如何利用 ECMAScript 2017 新增的 Object.keys 方法获取对象可枚举属性的名称

    在前端开发中,我们经常需要获取对象的属性名称。在 ECMAScript 2017 中,新增了 Object.keys 方法,可以更方便地获取对象的可枚举属性名称。本文将详细介绍如何使用 Object....

    1 年前
  • Serverless + API 网关:如何构建一套高效可靠的前端后台服务

    Serverless 和 API 网关是目前越来越流行的技术方案,可以让我们快速搭建高效可靠的前端后台服务。在本文中,我们将详细讲解 Serverless 和 API 网关的概念,介绍如何使用它们来构...

    1 年前
  • TypeScript 的可选协议

    前言 TypeScript 是一种基于 JavaScript 的可选静态类型语言,它提供了静态类型检查、面向对象编程、类型推断等特性,能够让我们在开发大型 web 应用时更加安全、可靠、易于维护。

    1 年前
  • Performance Optimization 技巧:使用 AJAX 减少页面加载时间

    前言 在如今这个时代,用户期望页面能够迅速地加载,否则他们会很快对网站失去耐心。减少页面加载时间是提高用户体验和增加网站流量的重要方法之一。在前端开发中,使用 AJAX 技术是一种有效的方式来降低页面...

    1 年前
  • Docker 容器中 MySQL 报错 "Can't create test file" 的解决方法

    在 Docker 容器中使用 MySQL,有时会遇到 "Can't create test file" 的错误提示。这个错误的原因是 MySQL 没有足够的权限在容器内创建文件。

    1 年前
  • RxJS 中的订阅和取消订阅操作及使用注意事项

    前言 RxJS 是一个强大的 JavaScript 库,它能够使得异步编程变得容易和可维护。RxJS 基于观察者模式,使用各种操作符对数据流进行处理,订阅后可以实时获取数据。

    1 年前
  • Jest 测试中的覆盖率分析技术解析

    在前端开发中,测试是非常重要的一环。Jest 是 Facebook 开源的一个 JavaScript 测试框架,它具有简单易用、快速执行、丰富的 API 等特点,特别适合用于编写单元测试、集成测试和端...

    1 年前
  • ES10 之 Promise.allSettled 及 Promise.any

    在 JavaScript 的语言特性中,Promise 已经被广泛应用于异步编程。在 ES6 中,引入了 Promise 来解决回调地狱的问题,使得异步编程更加简单与方便。

    1 年前
  • Mongoose+Express 实现登录授权及鉴权

    前言 在开发 Web 应用时,登录授权和鉴权是必不可少的功能。对于 Node.js 平台的应用,我们通常使用 Express.js 框架来搭建应用。而顶级 ORM 库 Mongoose 则是我们常常选...

    1 年前
  • ES11 全局更新:JavaScript 语言的新特性

    前言 ES11 是 JavaScript 语言的最新版本,又称为 ECMAScript 2020,最初提案于 2019 年 6 月,在2020年6月由 EBMAScript 官方发布,其中新增了很多的...

    1 年前
  • Sequelize 中如何实现跨模型的关联查询

    Sequelize 中如何实现跨模型的关联查询 关联查询是开发中常用的查询方式,Sequelize 是一个优秀的 Node.js ORM 库,可以帮助我们更快更方便地操作数据库。

    1 年前

相关推荐

    暂无文章