👶「GatsbyJSにサムネイル画像をつけたい」その1
動機
👶「GatsbyJSのブログ、CSS書いてみたけど…ダサくね???
(👶リサーチ中)おしゃれなブログにはみんな画像🗻が入ってる。つまり画像を入れればおしゃれになるのでは?助けて、🧛♀️」
🧛♀️「あい」
今回の環境:
Gatsby 2.23.3
React 16.12.0
コードはこちら: https://github.com/yuriacats/yuriacatsblogs
完成品はこちら: https://yuriacats.site
手順表
- Index.mdのヘッダー部分の書き換えとデフォルト画像の設定 ←今回
- blog-post.jsの変更 ←今回
- index.jsの変更 ←次回やる
- OGP画像の設定 ←次回やる(予定)
- 投稿通知設定 ←次回やる(予定)
Index.mdのヘッダー部分の書き換えとデフォルト画像の設定
Index.md
title: タイトルです
date: "2020-10-28"
description: これからのブログで実装します。
tags: [タグを,配列で,渡します]
thumbnail: "Hoge.png"
上記のようにタグを作ります。ここでは一番最後の行の「thumbnail」を覚えておきましょう。
そして、予め content/assets
以下にデフォルトの画像を加えておきましょう。
blog-post.jsの変更
サムネイル画像の定義付け
const thumbnail_image=post.frontmatter.thumbnail.childImageSharp.fluid;
(中略)
<Image fluid={thumbnail_image}/>
👶「サムネイル画像定義してない記事でエラーでちゃったぴえん(;_;)」
🧛♀️「デフォルト画像の定義しないと、画像定義してないのでエラー出るからIF文で場合分けしてデフォルト画像に設定くらいしろ」
👶「あい」
if (post.frontmatter.thumbnail){
const thumbnail_image=post.frontmatter.thumbnail.childImageSharp.fluid;
}
else{
const thumbnail_image=data.def_image.childImageSharp.fixed;
}
🧛♀️「変数代入くらい三項演算子使えよ。」
👶「あい」
const thumbnail_image= post.frontmatter.thumbnail ? post.frontmatter.thumbnail.childImageSharp.fluid : data.def_image.childImageSharp.fixed ;
👶「これで、<Image fluid={thumbnail_image}/>
を任意の場所に突っ込めばサムネイル画像が出せるのね。 後はSassでよしなにすればいいか」
GraphQLの書き換え
🧛♀️「export const pageQuery = graphql
以下に書かれている部分を書き換えて、デフォルトのサムネイルの画像の定義と、個別設定した、サムネイル画像の定義をしていくぞ。」
👶「…GraphQLナニモワカラナイ」
🧛♀️「ここは、src/components/bio.js
の顔写真の画像を取るコードを参照にしているぞ いい感じにコピペしろ 」
def_image: file(absolutePath: { regex: "/defalt.png/" }) {
childImageSharp {
fixed(width: 400, height: 300) {
...GatsbyImageSharpFixed
}
}
}
🧛♀️「次に、Markdownに定義したサムネイル画像を定義していくぞ」
🧛♀️「ここで最初にthumbnail
と定義し、画像の相対パスを付け加えたから無事見つけることができる。」
👶「じゃあ、わかりやすくするために全部baby
に置き換えても行けるんだね。」
🧛♀️「……(それ逆に可読性下がらないか…?確かにthumbnail
という名前もそれほど良いとは思っていないが。詳しい有志の方このへんってどうやって名前付けしてるのかご教授願いたいです。)」
(markdownEwmark 内)
thumbnail {
childImageSharp {
fluid(maxWidth: 1280) {
...GatsbyImageSharpFluid
}
}
}
🧛♀️「そして、それらを全部を合体させるとこうなる」
export const pageQuery = graphql`
query BlogPostBySlug($slug: String!) {
site {
siteMetadata {
title
}
}
def_image: file(absolutePath: { regex: "/defalt.png/" }) {
childImageSharp {
fixed(width: 400, height: 300) {
...GatsbyImageSharpFixed
}
}
}
markdownRemark(fields: { slug: { eq: $slug } }) {
id
excerpt(pruneLength: 160)
html
frontmatter {
title
date(formatString: "MMMM DD, YYYY")
description
thumbnail {
childImageSharp {
fluid(maxWidth: 1280) {
...GatsbyImageSharpFluid
}
}
}
}
}
}
`
終わりに
👶「わーい、これで記事の初めにいい感じに画像がついたよ!」
👶「ただこれ、maxWidth
の値を書き換えるとバグったりするからちょっと不安定よね」
👶「これ記事一覧とかSNSに出したときもいい感じに画像できるようにしたいよ。助けて🧛♀️」
つづく
参考にさせていただいた記事
https://www.corylog.com/gatsby/gatsby005/
https://codelabo.com/posts/20200329154929
Gatsby のImageについてのDocks
https://www.gatsbyjs.com/plugins/gatsby-image/
Author And Source
この問題について(👶「GatsbyJSにサムネイル画像をつけたい」その1), 我々は、より多くの情報をここで見つけました https://qiita.com/yuriacats/items/88370d28211f3ffe6936著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .