[React+Tailwind] Flowbite で Tab を表示してみる | 心を無にして始める React

準備

Flowbite が使えるプロジェクトを準備します。

Tabs コンポーネントをつくる

./src/components 配下に Tabs.js を作ります。

import React, { forwardRef } from 'react';
import {
  Tabs as FlowbiteTabs,
} from 'flowbite-react';

const TabsGroup = forwardRef((
  {
    children,
    ...otherProps
  },
  ref,
) => {
  return (
    <FlowbiteTabs.Group
      ref={ref}
      {...otherProps}
    >
      {children}
    </FlowbiteTabs.Group>
  );
});

const TabsItem = forwardRef((
  {
    active = false,
    children,
    disabled = false,
    icon,
    title,
    ...otherProps
  },
  ref,
) => {
  return (
    <FlowbiteTabs.Item
      active={active}
      disabled={disabled}
      icon={icon}
      ref={ref}
      title={title}
      {...otherProps}
    >
      {children}
    </FlowbiteTabs.Item>
  );
});

const Tabs = {
  Group: TabsGroup,
  Item: TabsItem,
};

export default Tabs;

Tabs コンポーネントをつかう

いつものように App.js を編集していきます。

import './App.css';
import Tabs from './components/Tabs';

function App() {
  return (
    <div className="min-h-screen w-full gap-4 flex flex-col justify-center items-center dark:text-white dark:!bg-gray-900">
      <div className="w-full p-8">
        <Tabs.Group
          aria-label="Tabs with underline"
          style="underline"
        >
          <Tabs.Item title="Profile">
            Profile content
          </Tabs.Item>
          <Tabs.Item
            active={true}
            title="Dashboard"
          >
            Dashboard content
          </Tabs.Item>
          <Tabs.Item title="Settings">
            Settings content
          </Tabs.Item>
          <Tabs.Item title="Contacts">
            Contacts content
          </Tabs.Item>
          <Tabs.Item
            disabled={true}
            title="Disabled"
          >
            Disabled content
          </Tabs.Item>
        </Tabs.Group>
      </div>
    </div>
  );
}

export default App;

結果

はい、できました。