🍞

【React】パンくずリストを実装してみた!

2023/09/07に公開

React(Next.js)でパンくずリストを作ったのでアウトプットしてみます。

// Next.js と React の必要なパーツをインポート
import Link from "next/link";
import { useRouter } from "next/router";
import React from "react";
// MUI(Material-UI)から HomeIcon をインポート
import HomeIcon from '@mui/icons-material/Home';

// Breadcrumb コンポーネントの定義
const Breadcrumb = () => {
    // 現在のルート(URL)に関する情報を取得
    const router = useRouter();
    // 各パスセグメントを結合するための変数
    let joinedPath = "";

    return (
        <div className="flex items-center text-sm px-4 w-full">
            {/* ホームアイコンとして "/" へのリンクを表示 */}
            <Link href="/">
                <HomeIcon className="text-gray-500 hover:text-gray-600" />
            </Link>
            {/* 現在のURLを「/」で分割し、各パスセグメントを処理 */}
            {router.asPath.split("/").map((path, index) => {
                // パスが空でない場合のみ処理
                if (path) {
                    // 現在のパスセグメントを joinedPath に追加
                    joinedPath += path + "/";
                    return (
                        // 各パスセグメントをクリック可能なリンクとして表示
                        <Link key={index} href={`/${joinedPath}`}>
                            <span className="text-gray-500 mx-2">/</span> {path}
                        </Link>
                    );
                }
            })}
        </div>
    );
};

// Breadcrumb コンポーネントをエクスポート
export default Breadcrumb;

全体のコードはこんな感じで、TailWindCSSでスタイリングしています。

まずは useRouter フックを使用して、現在のルート(URL)に関する情報を取得しています。

続いてロジック部分は、

joinedPath という変数を空文字列として初期化しています。

この変数は、各パスセグメントを結合するために使用します。

続いて**router.asPath.split("/")** で、現在のURLを「/」で分割して配列に変換しています。

あとは、map関数を使用して、各パスセグメントに対して処理を行っています。

if (path) で、パスが空でないかどうかを確認しています。

joinedPath += path + "/"; で、joinedPath に現在のパスセグメントを追加しています。

以上となります。

コピペでご自由にお使いください。

Discussion