GraphQL 与 React 的集成最佳实践

阅读时长 5 分钟读完

GraphQL 是一种用于 API 的查询语言,可以让前端开发者更加灵活地请求数据。配合 React 使用,GraphQL 可以提升前端应用的性能以及开发效率。本篇文章将介绍如何将 GraphQL 集成到 React 中,并给出最佳实践和示例代码。

安装和配置 GraphQL

要在 React 中使用 GraphQL,需要先安装相关库。我们使用 Apollo Client 作为 GraphQL 客户端库。在项目的根目录下运行以下命令:

安装完成后,需要创建 Apollo Client 实例。在 src/index.js 中添加以下代码:

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

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

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

这里使用了 Apollo Client 的 ApolloProvider,它会注入 ApolloClient 实例到整个 React 应用中。

定义 GraphQL 查询

在 React 中,我们可以通过 graphql 高阶组件定义 GraphQL 查询。这个高阶组件使用 GraphQL 查询语句来查询数据,并将其注入到组件的 props 中。

以下是一个示例 GraphQL 查询:

这个查询会返回所有文章的 ID、标题和作者。在组件中使用这个查询,代码如下:

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

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

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

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

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

这里使用了 graphql 高阶组件来注入查询结果。查询的结果会传递给 PostsList 组件的 data 属性中。

处理 GraphQL 的错误

当使用 GraphQL 查询时,可能会出现各种错误。为了演示如何处理错误,我们来模拟一个错误的查询。

这个查询会返回一个不存在的字段。我们可以通过 error 属性来捕获错误,代码如下:

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

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

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

这里使用了 render 属性来自定义渲染组件。如果查询出现错误,就会渲染 ErrorComponent 组件。

避免过渡查询

GraphQL 的一个优点是它可以精确地查询所需的数据。不过,有时候我们需要在组件中查询大量数据,这会降低性能。这时候,我们可以使用 react-apollo 提供的 withApollo HOC 避免被动查询。

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

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

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

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

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

在这个示例中,我们使用 client.readQuery 读取缓存中的数据,而不是被动地查询。这样可以避免不必要的网络请求,从而提高应用性能。

总结

本文介绍了如何将 GraphQL 集成到 React 中,并提供了最佳实践和示例代码。使用 Apollo Client、graphql 高阶组件以及 withApollo HOC,可以让 React 应用更加灵活、高效。

代码示例:https://github.com/apollostack/react-apollo/tree/master/examples/basic

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

纠错
反馈