GraphQL 中的 Gatsby pageContext 为空

Gatsby pageContext empty in GraphQL

我正在通过 Contentful 构建一个具有多种语言的动态 Gatsby 网站。我在 gatsby-node.js 中的 pageContext 对象中传递页面 ID 以获取每个页面上的必要内容,但在根 URL / 中我的 [=12] 中的数据=] 对象丢失。

在我的 index.js 文件中,pageContext 在根页面 / 上是空的,除了参数 pageContext.isCreatedByStatefulCreatePages 设置为 true。但是,对于在 gatsby-node.js 中创建的所有其他页面,pageContext 对象会按应有的方式显示。

我在 gatsby-node.js 中创建我的页面是这样的:

const baseUrl = locale === "da" ? "/" : `/${locale}/`
console.log(`${baseUrl}${slug ? slug : ""}`)
createPage({
  path: `${baseUrl}${slug ? slug : ""}`,
  component: path.resolve("./src/pages/index.js"),
  context: {
    id,
    slug,
    locale,
  },
})

我上面的console.log输出如下:

/virksomhed
/konsulent
/kontakt
/ <-- Page context is empty here
/om-os
/en/company
/en/consultant
/en/contact
/en/
/en/about-us

我可以看到每个页面都已创建。在除索引页面 ("/") 之外的任何其他页面上,isCreatedByStatefulCreatePages 设置为 false.

我怀疑 Gatsby 以某种方式覆盖了根 URL 的 "createPage",但我无法在文档中找到任何描述它的内容。

有人有这方面的经验吗?

是的,Gatsby 默认为 src/pages 中的每个 js 文件创建一个页面。尝试将您的模板移动到其他文件夹,例如 src/templates,并相应地调整 createPage()component 的值。