【发布时间】:2020-03-15 11:25:30
【问题描述】:
我在 Gatsby 应用程序中有一个 React 组件,它使用 useStaticQuery 挂钩从 GraphQL 层提取数据。这个组件在我的应用程序中使用,但它也被用作在单独的 Webpack 配置中创建的 JavaScript 嵌入/小部件的一部分。
我不希望小部件依赖于 Gatsby,因此我已经填充了 Gatsby 的相关位,但我仍然需要将数据传递给我为 useStaticQuery 创建的 shim。我发现我的 Gatsby 应用程序正在 public/static/d/2250905522.json 生成一个文件,其中包含查询数据的完美表示,我想像这样使用它:
// This file gets substituted when importing from `gatsby`
import queryResult from "../public/static/d/2250905522.json"
export const useStaticQuery = () => queryResult.data
export const graphql = () => {}
这可行,但我还没有弄清楚这是从哪里来的,或者如何以确定性/稳定的方式确定文件名。 Gatsby 是如何确定这个文件名的,我可以使用哪些内部结构来做同样的事情?
编辑:我在 Gatsby 代码库中发现 this routine 似乎使用 staticQueryComponent.hash 来确定数字。 staticQueryComponent 正在从 store.getState() 解构,其中 store 与 Redux 相关联,但我仍然不确定哈希在哪里确定。
编辑 2:找到 another mention of this in the documentation here。听起来hash 是查询本身的哈希,所以如果查询更改(很可能),这会随着时间而改变,所以我仍在寻找用于计算哈希的例程。
【问题讨论】: