如何将变量传递给 pageQuery
How do you pass variables to pageQuery
我在 Gatsby 中有这个页面:
import React from 'react'
import Link from 'gatsby-link'
import IntroPartial from '../partials/themes/intro'
export default class ThemeTemplate extends React.Component {
render(){
const theme = this.props.pathContext.theme
console.dir(this.data)
return (
<div>
<h1>{theme.name}</h1>
<IntroPartial theme={theme} />
</div>
)
}
}
export const pageQuery = graphql`
query ThemeQuery($theme: String){
allMarkdownRemark(
filter: { frontmatter: { themes: { in: [$theme] } } }
){
edges{
node{
frontmatter{
title
themes
}
html
}
}
}
}
`
假设我为 $theme
提供了一个选项,这个查询在 GraphQL 测试器中运行良好。如何提供 $theme
的值?我想将其设置为 this.props.pathContext.theme.slug
.
文档似乎暗示某些变量应该可以正常工作,但我不确定如何添加自己的变量。
传入 graphql 的变量来自 createPage。它通常在您的 gatsby-node 文件中调用。您经常会在示例中看到使用的路径,如 $path,因为它是必需的。
为了包含您自己的附加变量以传递到 graphql 调用中,您需要将它们添加到上下文中。稍微修改文档中的示例:
createPage({
path: `/my-sweet-new-page/`,
component: path.resolve(`./src/templates/my-sweet-new-page.js`),
// The context is passed as props to the component as well
// as into the component's GraphQL query.
context: {
theme: `name of your theme`,
},
})
然后您可以像示例中那样在查询中使用 $theme。在上面的代码中设置 $theme 将在 createPages 部分完成(参见示例),因为您将可以访问所有数据。
我在 Gatsby 中有这个页面:
import React from 'react'
import Link from 'gatsby-link'
import IntroPartial from '../partials/themes/intro'
export default class ThemeTemplate extends React.Component {
render(){
const theme = this.props.pathContext.theme
console.dir(this.data)
return (
<div>
<h1>{theme.name}</h1>
<IntroPartial theme={theme} />
</div>
)
}
}
export const pageQuery = graphql`
query ThemeQuery($theme: String){
allMarkdownRemark(
filter: { frontmatter: { themes: { in: [$theme] } } }
){
edges{
node{
frontmatter{
title
themes
}
html
}
}
}
}
`
假设我为 $theme
提供了一个选项,这个查询在 GraphQL 测试器中运行良好。如何提供 $theme
的值?我想将其设置为 this.props.pathContext.theme.slug
.
文档似乎暗示某些变量应该可以正常工作,但我不确定如何添加自己的变量。
传入 graphql 的变量来自 createPage。它通常在您的 gatsby-node 文件中调用。您经常会在示例中看到使用的路径,如 $path,因为它是必需的。
为了包含您自己的附加变量以传递到 graphql 调用中,您需要将它们添加到上下文中。稍微修改文档中的示例:
createPage({
path: `/my-sweet-new-page/`,
component: path.resolve(`./src/templates/my-sweet-new-page.js`),
// The context is passed as props to the component as well
// as into the component's GraphQL query.
context: {
theme: `name of your theme`,
},
})
然后您可以像示例中那样在查询中使用 $theme。在上面的代码中设置 $theme 将在 createPages 部分完成(参见示例),因为您将可以访问所有数据。