使用 React 和 GraphQL 构建实时记录列表

阅读时长 15 分钟读完

React 和 GraphQL 是一对非常火热的技术,用于构建现代化的 Web 应用程序,可以通过简单的、可复用的组件进行快速开发和部署。本文将介绍如何使用 React 和 GraphQL 来构建实时记录列表,从而创造一个可扩展且易于维护的应用程序。

为什么选择 React 和 GraphQL?

React 是一个用于构建用户界面的 JavaScript 库,它将 UI 分解为可重用的组件,并提供了丰富的生态系统和开发工具。 React 引入了虚拟 DOM,使得它非常快速、高效,并且易于理解。它还允许开发者以声明式方式描述界面,使得代码更加可读性强。

GraphQL 是一种用于 API 开发的查询语言和运行时,它提供了一个强大的工具来管理应用程序数据。GraphQL 允许客户端指定其需要的数据,并允许服务端只返回客户端所需的数据,这使得网络请求更加高效。它还提供了强大的查询和类型系统,使得 API 变得明确和易于维护。

React 和 GraphQL 的组合提供了极大的优势,包括:

  • 前后端代码分离,降低了开发复杂性
  • 灵活的数据查询和管理
  • 请求合并和批处理,提高网络效率
  • 可重用的组件和模块,提高开发效率

构建实时记录列表

本篇文章将演示如何使用 React 和 GraphQL 构建实时记录列表。该应用程序将使用以下技术:

准备工作

在开始编写代码之前,您需要做一些准备工作。首先,您需要确保安装了 Node.js 和 MongoDB。同时,您需要安装以下依赖项:

创建 GraphQL Schema

我们需要先创建一个 GraphQL Schema,定义我们的数据模型。在本文中,我们将用户和记录两个数据模型作为例子。该 Schema 的定义如下:

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

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

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

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

---- ------ -
  --- ---
  ------- ---
  ------ -------
  -------- -------
  ----- -----
-
展开代码

该 Schema 定义了查询(Query)、变更(Mutation)和订阅(Subscription)三个顶级操作类型,分别对应读取数据、修改数据和实时更新数据的场景。

创建 GraphQL 服务器

接下来,我们需要创建一个 GraphQL 服务器来实现 Schema,并提供对应的操作。在本文中,我们将使用 GraphQL-Yoga 实现该服务器。

以下是服务器的初始化和配置:

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

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

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

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

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

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

--------------- -- ------------------- -- ------- -- ------------------------
展开代码

我们使用了三个库:GraphQL-Yoga、mongoose 和 PubSub。GraphQL-Yoga 用于构建服务器,mongoose 用于与 MongoDB 进行数据交互,而 PubSub 用于实现订阅功能。我们创建了两个数据模型:User 和 Record,并编写了 Query、Mutation、Subscription 的实现。

创建前端应用程序

现在,我们可以开始构建前端应用程序了。在本文中,我们将使用 React 和 Apollo-Client 来实现该应用程序。

安装 Apollo-Client

首先,我们需要安装 Apollo-Client 和相关依赖项:

创建 Apollo-Client

我们需要创建一个 Apollo-Client,用于连接到 GraphQL 服务器。以下是代码:

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

----- ------ - --- --------------
  ------ --- ----------------
  ----- --- ---------- ---- ----------------------- ---
--
展开代码

我们配置了一个 apollo-client 与可重用的 HttpLink。我们将使用 HttpLink 来访问 GraphQL 服务器,并将其与 InMemoryCache 合并。这将为我们提供高效的缓存和查询性能。

创建记录列表

我们需要创建一个组件来显示记录列表。以下是代码:

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

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

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

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

------ ------- ----------
展开代码

我们使用 react-apollo 中的 Query 组件执行我们的 GraphQL 查询。在这里,我们检索所有的记录,并将其作为记录列表进行渲染。在读取时,我们还捕获了加载和错误状态,以便在加载期间为用户提供反馈和错误消息。

创建表单

我们需要创建一个表单组件,以便用户添加记录。以下是代码:

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

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

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

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

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

------ ------- ----------
展开代码

我们使用 Mutation 组件来处理提交数据,并在提交后更新我们的缓存。在这里,我们还显示了一个表单,以便用户输入记录的信息。一旦表单被提交,它将调用后端数据模型的 createRecord 方法,并在成功后向客户端发送添加记录的消息。

订阅实时流

我们还想实现一个实时流,以便向客户端推送新添加的记录。以下是代码:

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

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

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

------ ------- ------------
展开代码

我们使用 Subscription 组件来订阅添加新记录的操作。在这里,我们将执行新记录的查询,并将其作为实时流进行渲染,并在添加新记录时触发更新操作。在应用程序中使用这个组件将让用户得到实时更新的记录列表。

最终效果

在完成这些步骤后,我们可以启动应用,开始构建我们的应用程序。以下是最终效果的屏幕截图:

该应用程序非常简单,但它展示了如何使用 React 和 GraphQL 来构建实时记录列表。我们在前端使用了 React 和 Apollo-Client,后端使用了 GraphQL-Yoga 和 MongoDB。使用这些工具,我们可以轻松地管理应用程序的数据,从而提供更具可扩展性的应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c436b46e1fc40e36d1ab65

纠错
反馈

纠错反馈