概要

Tocbot という目次を作成できるライブラリを使って、Next.js製マークダウンブログに目次機能を実装します。

実施環境

導入

以下のコマンドを実行してTocbotをインストールします。Headingタグにidを付与するために、rehype-slugもインストールしておきます。(インストールしないと目次をクリックしても飛ばない)

PLAINTEXT
1npm install tocbot rehype-slug
クリックして展開し、詳細を表示

実装

今回はこのブログを例に実装します。目次用のコンポーネントToc.tsxを作成し以下のようにします。

TS
 1"use client";
 2
 3import { useEffect } from "react";
 4import tocbot from "tocbot";
 5
 6export const Toc = () => {
 7    useEffect(() => {
 8        tocbot.init({
 9            // 目次を表示させたいところのクラス名
10            tocSelector: ".toc",
11            // どこから目次を作成するか
12            contentSelector: ".prose",
13            // どの見出しを目次にするか
14            headingSelector: "h2, h3",
15        });
16        return () => tocbot.destroy();
17    }, []);
18
19    return (
20        // tocSelectorの対象
21        <div className="toc"></div>
22    );
23};
クリックして展開し、詳細を表示

useEffectを使っているので、App Routerでは"use client"を先頭に書く必要があります。

目次の装飾はtocSelectorで指定した要素にCSSを書いたりすればOKです。参考にこのブログのCSSを載せておきます。

CSS
 1.toc {
 2    @apply px-2;
 3}
 4
 5.toc-list-item {
 6    @apply py-1 text-gray-500;
 7}
 8
 9.toc-list-item .toc-list {
10    @apply pt-1 pl-3;
11}
12
13.is-active-link {
14    @apply text-gray-950 font-bold;
15}
クリックして展開し、詳細を表示

まとめ

こんな感じで目次を実装してみました。Tocbotを使うとかなり簡単に目次を実装することができるので、ぜひ導入してみてください。それでは!

検索を開始

キーワードを入力して記事を検索

↑↓
ESC
⌘K ショートカット