上から一つずつ見ていきます
設定項目にhero
欄を追加する
markdownファイルと同じディレクトリに今回は1.pngという画像を置く
それぞれのGraphQLに項目を追加
GraphQLにどの項目を追加したらいいかは
http://localhost:8000/___graphql
にアクセスして確かめることが出来る
childImageSharp {
fluid {
originalImg}}
今回は
hero {
id
childImageSharp {
original {
src
}
}
}
をfrontmatterに追加
export const pageQuery = graphql`
query {
site {
siteMetadata {
title
}
}
allMarkdownRemark(
sort: { fields: [frontmatter___date], order: DESC }
limit: 5
skip: 0
) {
nodes {
excerpt
fields {
slug
}
frontmatter {
date(formatString: "MMMM DD, YYYY")
title
description
hero {
id
childImageSharp {
original {
src
}
}
}
}
}
}
}
`
src/components/blogs.jsはGraphQLで取得できる
dataの中の
const posts = data.allMarkdownRemark.nodes
を引数に持つコンポーネント
import * as React from "react"
import { Link } from "gatsby"
const Blogs = ({ posts }) => {
return (
<ol style={{ listStyle: `none` }}>
{posts.map(post => {
const title = post.frontmatter.title || post.fields.slug
return (
<li key={post.fields.slug}>
<article
className="post-list-item"
itemScope
itemType="http://schema.org/Article"
>
{
post.frontmatter.hero ?
<div style={{
float: "left",
maxWidth: "250px",
maxHeight: "250px",
width: "30%",
margin: "24px",
marginLeft: 0,
}}>
<img
alt={`${post.frontmatter.title}`}
src={`${post.frontmatter.hero.childImageSharp.original.src}`}
style={{ width: "100%", borderRadius: 24, }}
/>
<small>{post.frontmatter.date}</small>
</div>
: ""
}
<header>
<h2>
<Link to={`${post.fields.slug}${post.frontmatter.title}`} itemProp="url">
<span itemProp="headline">{title}</span>
</Link>
</h2>
{
!post.frontmatter.hero ? <small>{post.frontmatter.date}</small> : ''
}
</header>
<section>
<p
dangerouslySetInnerHTML={{
__html: post.frontmatter.description || post.excerpt,
}}
itemProp="description"
/>
</section>
</article>
</li>
)
})}
</ol>
)
}
export default Blogs
画像を表示している部分は
<img
alt={`${post.frontmatter.title}`}
src={`${post.frontmatter.hero.childImageSharp.original.src}`}
style={{ width: "100%", borderRadius: 24, }}
/>
これで記事一覧にサムネイルが表示できる
参考 :