【问题标题】:Gatsby GraphQL ReactGatsby GraphQL 反应
【发布时间】:2020-08-28 07:38:32
【问题描述】:

因为我在 Graphql 中使用了一点 Apollo,所以 apollo 查询提供了“加载”,我可以通过检查加载状态来简单地渲染一些加载器。

当我使用 Gatsby 和 useStaticQuery 挂钩时,我无法获得任何“加载”状态,是否可以通过某种方式对其进行检查?或者除了useStaticQuery还有其他钩子吗?有人可以向我解释一下吗?

【问题讨论】:

  • 请编辑您的帖子标题以提出明确的问题,而不是列出软件标签。此外,关于 SO 的大多数问题都需要代码。请展示一些。
  • 查询结果是在构建时评估的,因此您不需要加载状态。将其称为静态查询是有原因的

标签: reactjs graphql gatsby


【解决方案1】:

Gatsby 在构建时运行查询并稍后用 JSON 文件导入替换它们,这就是为什么不需要加载状态,因为查询已经有数据了

根据Gatsby documentation

特定于查询期间设置的 GraphQL 服务器的代码 构建时间不再相关,可以交换 为每个查询提取的 JSON 数据。

与 GraphQL 和查询声明相关的导入更改为 对应于 Gatsby 的查询结果的 JSON 的导入 运行查询时发现

例如下面的组件


import { useStaticQuery, graphql } from "gatsby"
export () => {
  const data = useStaticQuery(graphql`
      siteMetadata {
        site {
            title
        }
      }
  `)
  return (
    <h1>
        {data.siteMetadata.site.title}
    </h1>
  )
}

在构建后将被以下代码覆盖

import dataJson from `/d/<hash>.json`
export () => {
  const data = dataJson
  return (
    <h1>
        {data.siteMetadata.site.title}
    </h1>
  )
}

【讨论】:

  • 当然我理解这个逻辑,但是当你想从外部 Api 获取数据时也会发生同样的情况?
  • 与 PageQueries 的 useStaticQueries 一起使用的外部 API 都将在构建时编译。数据的任何更改都需要它们触发重建
猜你喜欢
  • 2019-02-19
  • 2020-03-23
  • 2021-05-08
  • 2020-10-28
  • 2020-09-18
  • 2019-10-12
  • 2020-01-18
  • 2020-08-11
  • 2020-03-02
相关资源
最近更新 更多