Gatsbyでshareボタンを表示する

March 05, 2022

これは何?

Gatsby の blog starter で、share ボタンを追加する方法です。

下記のライブラリを使用します。

確認環境

$ gatsby --version
Gatsby CLI version: 4.4.0
Gatsby version: 4.5.2

ライブラリをインストール

$ npm install --save react-share

share ボタンの一覧コンポーネント作成

src/components/shareButtonList.js

import React from "react"
import {
  FacebookIcon,
  FacebookShareButton,
  TwitterIcon,
  TwitterShareButton,
  LineIcon,
  LineShareButton,
} from "react-share"

const ShareButtonList = ({ title, url, description }) => {
  const iconSize = 32

  return (
    <>
      <h3>SHARE</h3>
      <div className="social-links">
        <div className="social-links__icon">
          <TwitterShareButton url={url} title={title}>
            <TwitterIcon round size={iconSize} />
          </TwitterShareButton>
        </div>
        <div className="social-links__icon">
          <FacebookShareButton url={url} quote={description}>
            <FacebookIcon round size={iconSize} />
          </FacebookShareButton>
        </div>
        <div className="social-links__icon">
          <LineShareButton url={url} quote={description}>
            <LineIcon round size={iconSize} />
          </LineShareButton>
        </div>
      </div>
    </>
  )
}

export default ShareButtonList

blog テンプレートにコンポーネントを設定

src/templates/blog-post.js

import ShareButtonList from "../components/shareButtonList"

...
        <ShareButtonList
          title={post.frontmatter.title}
          url={`${data.site.siteMetadata.siteUrl}/${post.fields.slug}`}
          description={post.excerpt}
        />
        /* footerの上あたりに追加してください */
        <footer>
          <Bio />
        </footer>

ここで、表示するデータが足りない場合、pageQuery に追加してください。

私の場合、↓ を追加しました。

  • site.siteMetadata.siteUrl
  • markdownRemark.fields.slug

CSS を追加

src/style.css

/* share button list */
.social-links {
  margin-bottom: 40px;
}

.social-links__icon {
  display: inline;
  margin-right: 10px;
}

おわりに

React で CSS の設定方法が何種類かありそうなので、また調べたいと思います。

参考


SHARE

Profile picture

Written by tamesuu