Gatsbyで目次を追加する

February 20, 2022

これは何?

Gatsby の blog starter で、目次を追加する方法です。 starterはこちら↓

確認環境

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

目次コンポーネントの作成

src/components/toc.js

import React from "react"

const TOC = ({ html }) => {
  return <div dangerouslySetInnerHTML={{ __html: html }}></div>
}

export default TOC

GraphQLでtableOfContentsを取得するように追加して、コンポーネントを利用

関係ないところは ... で省略しています。

src/templates/blog-post.js

import TOC from "../components/toc"

...
<TOC html={post.tableOfContents} />

...
export const pageQuery = graphql`
  query BlogPostBySlug(
    $id: String!
    $previousPostId: String
    $nextPostId: String
  ) {
    ...
    markdownRemark(id: { eq: $id }) {
      id
      excerpt(pruneLength: 160)
      html
      frontmatter {
        title
        date(formatString: "MMMM DD, YYYY")
        description
      }
      tableOfContents
    }
    ...
  }
`

プラグインの設定

このままでは、目次をクリックしても遷移しないのでプラグインを追加します。

$ npm install gatsby-remark-autolink-headers

以下、抜粋です。

gatsby-config.js

const config = {
  ...
  plugins: [
    {
      resolve: `gatsby-transformer-remark`,
      options: {
          ...
          `gatsby-remark-autolink-headers`,
          `gatsby-remark-prismjs`,
          ...
        ],
      },
    },
  ]
}
...

gatsby-remark-prismjs より前に設定する必要があるようです。

おわりに

目次のスタイルは、このままで良いかな。

参考


SHARE

Profile picture

Written by tamesuu