Редактировать: все получилось , даже если он чувствует себя как-то не так ... Любые идеи, позволяющие использовать только имя файла, а не относительный путь, будут оценены.Во всяком случае, вот как у меня это работает:
data.json
[
{
"slug": "bloom",
"name": "Bloom",
"image": {
"src": "../images/socks1.jpg"
}
}
]
Запрос:
{
allDataJson {
edges {
node {
slug
name
image {
src {
childImageSharp {
fluid {
src
}
}
}
}
}
}
}
}
Я пытаюсь отобразитьизображение, имя которого хранится в data.json, а сам файл находится в src / images
src / data / data.json
[
{
"slug": "sock1",
"name": "sock1",
"image": "socks1.jpg"
}
]
Если вместо чистого имени файла,Я предоставляю URL для любого изображения в Интернете, оно работает. Попытался заставить его работать следующим образом:
gatsby-config.js
module.exports = {
plugins: [
{
resolve: `gatsby-source-filesystem`,
options: {
name: `data`,
path: `${__dirname}/src/data`,
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: `${__dirname}/src/images`,
},
},
`gatsby-transformer-json`,
`gatsby-transformer-sharp`,
`gatsby-plugin-sharp`,
],
}
product.js
import React from 'react'
import { graphql } from 'gatsby'
import Layout from '../components/layout'
import get from 'lodash/get'
class ProductPage extends React.Component {
render() {
const products = get(this, 'props.data.allDataJson.edges')
console.log(products)
return (
<Layout>
{products.map(({ node }) => {
return (
<div key={node.name}>
<p>{node.name}</p>
<img src={node.image} />
</div>
)
})}
</Layout>
)
}
}
export default ProductPage
export const productsQuery = graphql`
query {
allDataJson {
edges {
node {
slug
name
image
}
}
}
}
`
Все, что выводится на веб-интерфейс, это
<img src="socks1.jpg">
Если я запрашиваю все файлы в GraphiQl, я получаю их, но (не уверен насчет этого) Я думаю, что поле изображения просто нераспознается как поле типа файла (не может запросить src и т. д.)
Любые указатели приветствуются!:)