在构建时使用 gatsby 和 netlify 获取数据后,将 api 数据保存在客户端上

Persisting api data on client after fetching at build time with gatsby and netlify

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

我正在为需要显示最新 day/week/months 数据的动画视图的客户构建天气应用程序,这需要对不同分辨率的数据向天气 API 发出多个请求然后基本上使用 setInterval 将其插入可视化。

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

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

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

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

Is there a way to put the build time fetched and formatted data into json or similar and serve statically for rendering on the client?

是的。

  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.