如何在 Next.js 中使用 GraphQL

阅读时长 6 分钟读完

GraphQL 是一种用于 API 的查询语言,它可以让前端开发者更加灵活地请求数据。Next.js 是一个用于构建 React 应用程序的框架,它可以与 GraphQL 很好地集成。本文将介绍如何在 Next.js 中使用 GraphQL。

安装依赖

在开始之前,需要安装以下依赖:

  • apollo-client:用于在客户端使用 GraphQL。
  • apollo-server-micro:用于在服务器端使用 GraphQL。
  • graphql:GraphQL 的核心包。

可以使用以下命令进行安装:

在客户端使用 GraphQL

在 Next.js 中,可以使用 getStaticPropsgetServerSideProps 方法从服务器获取数据。这里我们将使用 getStaticProps 方法。

首先,在页面组件中导入 apollo-client,并创建一个 Apollo 客户端:

在上面的代码中,我们指定了 GraphQL API 的 URL,并创建了一个缓存对象。现在我们可以使用 client 对象来发送 GraphQL 查询了。

假设我们有一个 posts 查询,用于获取博客文章的列表。我们可以使用以下代码来发送查询:

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

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

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

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

在上面的代码中,我们首先使用 gql 函数定义了一个查询。然后,我们在 getStaticProps 方法中使用 client.query 方法发送查询,并将结果作为 props 对象返回。

现在我们可以在页面组件中使用 props.posts 来渲染博客文章的列表了。

在服务器端使用 GraphQL

在 Next.js 中,可以使用 pages/api 目录中的文件来创建 API。我们将在这里创建一个 GraphQL API。

首先,在 pages/api 目录中创建一个 graphql.js 文件,然后导入 apollo-server-micrographql

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

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

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

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

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

在上面的代码中,我们首先使用 makeExecutableSchema 函数创建一个 GraphQL schema。然后,我们创建了一个 Apollo 服务器,并将 schema 传递给它。最后,我们将服务器的处理程序导出,并将其绑定到 /api/graphql 路径上。

现在,我们需要定义 schema 和 resolvers。在 pages/api 目录中创建一个 schema.js 文件,然后定义一个 typeDefs 对象:

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

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

在上面的代码中,我们定义了一个 Post 类型,它包含 idtitlecontent 字段,以及一个 Query 类型,它包含一个 posts 查询。

接下来,在 pages/api 目录中创建一个 resolvers.js 文件,然后定义一个 resolvers 对象:

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

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

在上面的代码中,我们定义了一个 posts 数组,它包含两个博客文章。然后,我们定义了一个 Query 类型的解析器,它返回 posts 数组。

现在,我们可以启动 Next.js 应用程序,并尝试从客户端发送 GraphQL 查询,或从浏览器中打开 /api/graphql 路径来测试 API。

总结

在本文中,我们介绍了如何在 Next.js 中使用 GraphQL。我们首先在客户端使用 apollo-client 发送 GraphQL 查询,然后在服务器端使用 apollo-server-micro 创建了一个 GraphQL API。希望本文能够帮助你更好地使用 Next.js 和 GraphQL。

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

纠错
反馈