Обновлено: теперь с рабочим кодом ниже
У меня есть этот запрос для получения Гэтсби-образ:
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, поэтому у меня есть следующий код:
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;
В любом случае передать maxWidth: 1000 или фрагмент (GatsbyImageSharpFluid) в качестве переменной. Это сделало бы его более динамичным.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, чтобы передавать переменные, вы должны использовать следующий синтаксис
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"}
)
Примечание: это будет работать только в файле gatsby-node, передача переменной в метод graphql со статическим запросом (например) не позволит использовать переменные.
Два ответа (от Бенса и Нимиша) неверны в этом контексте, они не относятся к Гэтсби.
Если вы хотите использовать переменные в запросах GraphQL, вы должны передать их через контекст в функции createPage в gatsby-node.js, как описано здесь:
https://www.gatsbyjs.org/docs/programmatically-create-pages-from-data/
В настоящее время вы не можете использовать другие переменные, например взгляните на это обсуждение: https://spectrum.chat/?t=abee4d1d-6bc4-4202-afb2-38326d91bd05
К сожалению, это так. Я добавил рабочий код на основе этой второй ссылки.
Большое спасибо за предоставленную рабочую версию! Вы сэкономили мне часы работы.