グリッド形式でWebサイトにレンダリングしたい16枚の画像があります。
これには次のプラグインを使用しています。
gatsby-image
gatsby-source-filesystem
gatsby-plugin-sharp
gatsby-transformer-sharp
私はドキュメントを読みましたが、私が知っているように、それは単一の画像をクエリする方法を示しただけでした。
例えば.
import React from "react"
import { graphql } from "gatsby"
import Img from "gatsby-image"
export default ({ data }) => (
<div>
<h1>Hello gatsby-image</h1>
<Img fixed={data.file.childImageSharp.fixed} />
</div>
)
export const query = graphql`
query {
file(relativePath: { eq: "blog/avatars/kyle-mathews.jpeg" }) {
childImageSharp {
# Specify the image processing specifications right in the query.
# Makes it trivial to update as your page's design changes.
fixed(width: 125, height: 125) {
...GatsbyImageSharpFixed
}
}
}
}
`
しかし、16枚の画像がある場合、どうすればよいですか? 16の個別のクエリを書くのはかなり面倒に思え、将来的に読むのは難しいでしょう。
複数の画像を参照しているドキュメントでこのコードを見ましたが、画像自体にアクセスするのに問題があります。
例えば.
export const squareImage = graphql`
fragment squareImage on File {
childImageSharp {
fluid(maxWidth: 200, maxHeight: 200) {
...GatsbyImageSharpFluid
}
}
}
`
export const query = graphql`
query {
image1: file(relativePath: { eq: "images/image1.jpg" }) {
...squareImage
}
image2: file(relativePath: { eq: "images/image2.jpg" }) {
...squareImage
}
image3: file(relativePath: { eq: "images/image3.jpg" }) {
...squareImage
}
}
`
私のフォルダ構造は次のとおりです:
--- package.json
--- src
------画像
--------- the 16画像
------ページ
--------- 16個の画像をレンダリングするページ
等.
ありがとうございました。
GraphiQLを試してみると、特にExplorerにとって役立つはずです。ただし、GatsbyフラグメントはGraphiQLでは機能しないことに注意してください。
{
allImageSharp {
edges {
node {
id
fluid(maxWidth: 200, maxHeight: 200) {
...GatsbyImageSharpFluid
}
}
}
}
}
したがって、上記はwillがGraphiQLで機能する次のクエリのようなものと等しいはずです。
{
allImageSharp {
edges {
node {
id
fluid(maxHeight: 200, maxWidth: 200) {
src
srcSet
base64
aspectRatio
originalImg
sizes
}
}
}
}
}
次に、コンポーネントはこの同じクエリを使用して、次のように結果をレンダリングできます。
import React from "react"
import { graphql } from "gatsby"
import Img from "gatsby-image"
const imgGridStyle = {
display: 'grid',
gridTemplateColumns: `repeat(auto-fill, 200px)`
};
export default ({ data }) => (
<div>
<h1>Hello gatsby-image</h1>
<div style={imgGridStyle}>
{data.allImageSharp.edges.map(Edge =>
<Img fluid={Edge.node.fluid} />
)}
</div>
</div>
)
export const query = graphql`
query {
allImageSharp {
edges {
node {
id
fluid(maxWidth: 200, maxHeight: 200) {
...GatsbyImageSharpFluid
}
}
}
}
}
`
data.allImageSharp.edges.map
のクエリから返されたimageSharpノードの配列を簡単にループできます。次に、各ノードのfluid
プロパティをfluid
プロパティとしてgatsby-image
に渡します。
注:これにより、プロジェクト内のevery imageSharpノードがレンダリングされます。これは、目的とは異なる場合があります。