Next.js と TypeScript で、タブ切り替えコンポーネントを作る

TwitterFacebookHatena

TL;DR

ユーザーフレンドリーなインターフェースを持つウェブサイトには、タブ切り替えコンポーネントが欠かせません。この記事では、Next.js と TypeScript を使用して独自のタブ切り替えコンポーネントを作成する方法について解説します。

開発環境 バージョン
Next.js 13.4.3
TypeScript 5.0.4
Emotion 11.11.0
React 18.2.0

タブ切り替えコンポーネントの実装

まず、具体的なコードを見てみましょう。

// components/Tabs.tsx

import { useState } from 'react'
import { css } from '@emotion/react'

type TabProps = {
  tabs: string[]
}

const Tabs = ({ tabs }: TabProps) => {
  const [activeTab, setActiveTab] = useState(tabs[0])

  return (
    <div>
      {tabs.map((tab) => (
        <button
          key={tab}
          onClick={() => setActiveTab(tab)}
          css={css`
            background-color: ${tab === activeTab ? 'blue' : 'white'};
            color: ${tab === activeTab ? 'white' : 'black'};
          `}
        >
          {tab}
        </button>
      ))}
      <div>{activeTab} content</div>
    </div>
  )
}

export default Tabs

このコードは、タブのリストを受け取り、各タブをクリックするとアクティブなタブが変更され、その内容が表示されるコンポーネントを定義します。

呼び出し

タブ切り替えコンポーネントを任意のページから利用するためには、以下のようにコンポーネントをインポートし、タブのリストを tabs プロパティとして渡します。

// pages/index.tsx

import Tabs from '../components/Tabs'

const HomePage = () => {
  return (
    <div>
      <h1>Home Page</h1>
      <Tabs tabs={['Tab1', 'Tab2', 'Tab3']} />
    </div>
  )
}

export default HomePage

このように Tabs コンポーネントをページに配置し、tabs プロパティにタブの名前を配列で渡すだけで、タブ切り替え機能が手に入ります。かなりスッキリと実装できるのが、コンポーネントベースの設計の良いところですよね。

コード解説

それでは、上記のコードを詳しく見ていきましょう。

まず、useState フックを使用して activeTab の状態を管理します。初期値は tabs 配列の最初の要素とします。

次に、 tabs 配列をマップして、各タブに対応するボタンを作成します。ボタンがクリックされると setActiveTab が呼び出され、 activeTab の値がそのタブに設定されます。

そして、Emotion を用いてボタンの背景色と文字色を設定します。アクティブなタブは背景色が青で文字色が白になり、非アクティブなタブは背景色が白で文字色が黒になります。

最後に、アクティブなタブの内容を表示します。ここではシンプルにタブの名前と "content" を表示していますが、実際のアプリケーションでは、ここにタブに関連するコンポーネントやデータを表示することになります。

タブ切り替えコンポーネントを学ぶ

さらに深く学びたい方のために、ドキュメントを紹介します。

タイトル(リンク) 説明
React 公式ドキュメント useState フックの詳しい説明
Next.js 公式ドキュメント Next.js の詳細なドキュメント
TypeScript 公式ドキュメント TypeScript の詳細なドキュメント
Emotion 公式ドキュメント Emotion の詳細なドキュメント

以上、Next.js と TypeScript を使用してタブ切り替えコンポーネントを作成する方法について解説しました。これを使って UI を一段と良くしてみてくださいね。

Next.js と TypeScript で、タブ切り替えコンポーネントを作る