使用gatsby-node.js
和createPages
,我可以使用graphql查询某物,并使用该某物作为页面上下文来创建页面。因此,这些页面可以在查询中使用 something 作为参数。
我面临的问题是我不想使用createPages
。我对默认创建的页面(来自gatsby-plugin-page-creator
)完全满意,我只希望所有页面都具有来自graphql的某物作为上下文。
基本上,我希望所有页面都可以使用全局上下文(从gatsby graphql获得)。
有onCreatePage
钩子,但不幸的是,根据https://github.com/gatsbyjs/gatsby/issues/3121#issuecomment-348781341,graphql不可用。
答案 0 :(得分:1)
这是什么...您可以尝试在您的gatsby-nodejs
文件中使用 onCreateNode()挂钩。例如:
const allMyPageNodes = [];
exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions;
if(...) { //whatever filtering you need to select JUST pages in your site
const mySpecialContext = "blah"; //whatever your global context settings are
createNodeField({ node, name: "myglobal", value: mySpecialContext });
allMyPageNodes.push(node);
}
}
```
然后在随后的所有graphql查询中,对于页面,graphql有效负载应填充 edge.node.fields.myglobal ,并且您应该可以使用它进行任何操作。还可以查看https://www.gatsbyjs.org/docs/static-query/,以便直接从组件内部进行查询。
HTH。