编辑:现在下面带有工作代码
我有此查询来获取gatsby-image:
query getImages($fileName: String) {
landscape: file(relativePath: {eq: $fileName}) {
childImageSharp {
fluid(maxWidth: 1000) {
base64
tracedSVG
aspectRatio
src
srcSet
srcWebp
srcSetWebp
sizes
originalImg
originalName
}
}
}
}
然后是该查询变量:
{
"fileName": "titanic.jpg"
}
以上在GraphiQL中正常工作。
现在我想在盖茨比使用它,所以我有以下代码:
import React from "react"
import { graphql } from "gatsby"
import Img from "gatsby-image"
export default ({ data }) => (
<div>
<Img fluid={data.landscape.childImageSharp.fluid} />
</div>
)
export const query = (
graphql`
query getImages($fileName: String) {
landscape: file(relativePath: {eq: $fileName}) {
childImageSharp {
fluid(maxWidth: 1000) {
base64
tracedSVG
aspectRatio
src
srcSet
srcWebp
srcSetWebp
sizes
originalImg
originalName
}
}
}
}
`,
{fileName: "knight.jpg"}
)
以上操作无效。 data.landscape.childImageSharp === null
我在做什么错了?
编辑:
感谢您的帮助!以下代码效果很好。这个post特别有用。这不是理想的解决方案,但对我有用。
import React from 'react';
import Img from 'gatsby-image';
import { StaticQuery, graphql } from 'gatsby';
function renderImage(file) {
return (
<Img fluid={file.node.childImageSharp.fluid} />
)
}
const MyImg = function (props) {
return <StaticQuery
query={graphql`
query {
images: allFile(filter: { sourceInstanceName: { eq: "images" } }) {
edges {
node {
extension
relativePath
childImageSharp {
fluid(maxWidth: 1000) {
...GatsbyImageSharpFluid
}
}
}
}
}
}
`}
render={(data) => {
const image = data.images.edges.find(
image => image.node.relativePath === "knight.jpg"
)
return(renderImage(image))
}}
/>
}
export default MyImg;
答案 0 :(得分:1)
在这种情况下,这两个答案(来自本斯和尼米什)是错误的,它们并不是针对盖茨比的。
如果要在GraphQL查询中使用变量,则必须在createPage
的{{1}}函数中通过上下文传递变量,如下所示:
https://www.gatsbyjs.org/docs/programmatically-create-pages-from-data/
您目前不能使用其他变量,例如看一下这个讨论: https://spectrum.chat/?t=abee4d1d-6bc4-4202-afb2-38326d91bd05
答案 1 :(得分:-1)
因此,要传递变量,您必须使用以下语法
graphql(`<your_query_with_variable>`, { indexPage: <value_of_variable> })
所以查询将会是这样的
export const query = grapqhl(
`query getImages($fileName: String) {
landscape: file(relativePath: {eq: $fileName}) {
childImageSharp {
fluid(maxWidth: 1000) {
base64
tracedSVG
aspectRatio
src
srcSet
srcWebp
srcSetWebp
sizes
originalImg
originalName
}
}
}
}
`,
{fileName: "knight.jpg"}
)