~30歳プログラマ歴2年の趣味サイト~
CategoryContactAbout
2020.04.17

gatsby-imageでエラーが出る

はじめに

Gatsby.jsとTypescriptを使っている本サイトを作成中に画像を表示させようとしたところエラーが出てかなり詰まったのでその原因と対処法に関してまとめます。

エラー内容

下記コードのfixedに対してエラーが出る。

    <Img fixed={data.allFile.edges[2].node.childImageSharp.fixed} />

fixedエラー画面

コンソールを見ても

    Failed prop type: Invalid prop `fixed` supplied to `Image`.

fixedコンソールエラー画面

とエラーが出ていることがわかる。

原因

完全にイージーなミスであったが、queryが間違っていた。

修正前のquery

fixed(width: 300, height: 300) {
  base64
  tracedSVG
  aspectRatio
  srcWebp
  srcSetWebp
  originalName
}

対処方法

こちらのQAを参考にqueryを修正した

https://github.com/gatsbyjs/gatsby/issues/9882

gatsbyjs/gatsby#9882

修正後のquery

fixed(width: 300, height: 300) {
  base64
  width
  height
  src
  srcSet
  originalName
}

考察

最初のqueryはlocalhost:8000/___graphqlでfixedを押下したときに自動で出てくるもので、自動だからこれでいいだろうと思い込んでいた。 だがよく考えれば幅と高さを指定しているのにその値がないのは明らかにおかしい。

まとめ

当たり前なことではあるがエラー内容をちゃんと見て対処をしなければならないと改めて思った。 あと、graphQLに関して理解が浅いのでもっと勉強しようと思う。

コード全体

暫定的なコードで値をそのまま入れているところも多いがご容赦

    const IndexPage: React.FC<Props> = ({ data }) => {
      return (
        <Layout>
          <Img fixed={data.allFile.edges[2].node.childImageSharp.fixed} />
          <Label labelName="New Posts" />
          <Section>
            <Card blogTitle="Gatsbyを使ってみた.かなりいい感じである" link="/blogs/gatsby/first" />
            <Card blogTitle="index" link="/blogs/game/first" />
          </Section>
          <Label labelName="Pick Up" />
          <Section>
            <Card blogTitle="Gatsbyを使ってみた.かなりいい感じである" link="/blogs/gatsby/first" />
            <Card blogTitle="index" link="/blogs/game/first" />
          </Section>
        </Layout>
      )
    }
    export default IndexPage;
    export const query = graphql`
    query IndexTest{
      allMarkdownRemark {
        edges {
          node {
            id
            frontmatter {
              title
              date
              description
            }
            html
          }
        }
      }
      allFile {
        edges {
          node {
            id
            childImageSharp {
              id
              fixed(width: 300, height: 300) {
                base64
                tracedSVG
                aspectRatio
                srcWebp
                srcSetWebp
                originalName
              }
            }
          }
        }
      }
    }
    `

愛知県在住。プログラマ歴2年目。自動車部品メーカーにて5年程従事した後に、新規一転プログラマの道へ。

現在はベンチャー企業でシステム開発を行っている。メインの使用言語はC#。フロントもJQueryでやっているがReactへの移行を考えている。 短期目標はプログラミング知識を身に着けて自分一人でサービス開発をする、その後中期目標として5年後までにはゲーム開発会社を起業する。 長期目標は楽しく、楽して人生を送りたい。プログラミングは大好き。

仕事、質問、指摘どんなことでも嬉しいのでコンタクトから連絡いただけるとありがたいです。

Gatsby.js + TypeScript + Netlify