РЕДАКТИРОВАТЬ: теперь с рабочим кодом ниже
Версия GraphiQL
У меня есть этот запрос для получения 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 .
Версия Gatsby
Теперь я хочу использовать его в Gatsby, поэтому у меня есть следующий код:
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
Что я делаю не так?
РЕДАКТИРОВАТЬ:
Рабочая версия
Спасибо за помощь!Следующий код работает довольно хорошо.Эта запись была особенно полезна.Это не идеальное решение, но оно работает для меня.
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;