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

準備

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

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

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

import React, { forwardRef } from 'react';
import {
  Progress as FlowbiteProgress,
} from 'flowbite-react';

const Progress = forwardRef((
  {
    children,
    size = 'md',
    label,
    labelPosition = 'none',
    labelProgress = false,
    progress,
    ...otherProps
  },
  ref,
) => {
  return (
    <FlowbiteProgress
      size={size}
      label={label}
      labelPosition={labelPosition}
      labelProgress={labelProgress}
      progress={progress}
      ref={ref}
      {...otherProps}
    >
      {children}
    </FlowbiteProgress>
  );
})

export default Progress;

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

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

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

function App() {
  return (
    <div className="min-h-screen gap-4 flex flex-col justify-center items-center dark:text-white dark:!bg-gray-900">
      <div className="w-1/2">
        <div>
          <Progress
            progress={45}
            label="Flowbite"
            labelPosition="outside"
            labelProgress={true}
          />
        </div>
        <div className="mt-8 flex flex-col gap-2">
          <div className="text-base font-medium">
            Dark (Color inversion in dark mode)
          </div>
          <Progress
            progress={45}
            color="dark"
          />
          <div className="text-base font-medium text-blue-700">
            Blue
          </div>
          <Progress
            progress={45}
            color="blue"
          />
          <div className="text-base font-medium text-red-700">
            Red
          </div>
          <Progress
            progress={45}
            color="red"
          />
          <div className="text-base font-medium text-green-700">
            Green
          </div>
          <Progress
            progress={45}
            color="green"
          />
          <div className="text-base font-medium text-yellow-700">
            Yellow
          </div>
          <Progress
            progress={45}
            color="yellow"
          />
          <div className="text-base font-medium text-indigo-700">
            Indigo
          </div>
          <Progress
            progress={45}
            color="indigo"
          />
          <div className="text-base font-medium text-purple-700">
            Purple
          </div>
          <Progress
            progress={45}
            color="purple"
          />
        </div>
        <div className="mt-8">
          <Progress
            progress={50}
            label="Flowbite"
            labelPosition="inside"
            size="lg"
          />
        </div>
      </div>
    </div>
  );
}

export default App;

結果

はい、できました。