【问题标题】:Persisting api data on client after fetching at build time with gatsby and netlify使用 gatsby 和 netlify 在构建时获取后在客户端上保留 api 数据
【发布时间】:2020-02-05 16:14:30
【问题描述】:

Gatsby 和 Netlify 的新手,但我有一个问题无法在其他地方找到答案,可能是因为这是错误的方法。

我正在为需要显示最后一天/周/月数据的动画视图的客户端构建一个天气应用程序,这需要向天气 API 发出多个请求以获取不同分辨率的数据,然后将其插入本质上使用 setInterval 进行可视化。

与其在客户端发出所有这些请求,我想到的是,我可以在构建时通过计划构建获取所有数据,并每天使用这些更新的数据静态地为页面提供服务,这样可以节省 API 并减少费用。

问题是 gatsby 假设您想用获取的数据生成 html 并使用 createPages 但在这里我只想将数据作为 json 存储在 js 包中以便在客户端上呈现。

有没有办法将构建时获取和格式化的数据放入 json 或类似的格式中,并静态服务以在客户端上呈现?

【问题讨论】:

标签: gatsby netlify jamstack


【解决方案1】:

你用 jamstack 标签标记了这个问题,你的方法完全符合这种方法。

有没有办法将构建时间获取和格式化的数据放入 json 或类似的并静态服务以在客户端上呈现?

是的。

  1. 构建显示天气数据的 React 代码。
  2. 构建您的天气数据 json。
  3. 仅使用天气数据 json 中的变量。

简单示例:

import data from "./data/weatherData.json"

const WeatherApp = () => {
  return (
    <Layout>
      <h1>{data.title}</h1>
      <div>{data.rain}</div>
      <div>{data.temperature}</div>
    </Layout>
  );
};

为了填充天气数据,您可以构建一个复杂的 GraphQL 查询,以完全按照您需要的方式获取所有数据。

另一种方法是构建您自己的 API,例如使用 AWS lamba 或类似的无服务器免费服务,并以此提供您的天气数据。这样您就不需要触发gatsby build

【讨论】:

  • 感谢您的回复。我很放心,我现在在正确的树上吠叫,你的最后评论是我没想到的。我本来打算使用 Netlify 函数来提供实时数据并处理 api 凭据,因此可以创建一个单独的函数来组合历史数据,尽管无论如何这只会由自动每日构建过程调用,所以可能存在相同的差异它在构建时与 gatsby 一起使用.. 不过要考虑一下。干杯!到目前为止,我还是很喜欢 JAMStack
  • 太棒了!您可以通过单击复选标记接受此答案以解决您的问题,这样人们就不会偶然发现您已解决的问题。 =)
  • 酷,所以我的下一个问题是特定于 Netlify 的,但会在此处添加以防万一:现在我已经创建了一个 Netlify lambda 函数来获取构建所需的数据。如何确保它在构建时可用?在我看来,Netlify 在处理函数文件夹之前运行构建,因此端点在构建时不可用以从中提取数据..
猜你喜欢
  • 2019-04-29
  • 2021-03-08
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2012-07-18
  • 1970-01-01
  • 2022-06-27
相关资源
最近更新 更多