💻

TailwindCSSとReact(useState)で作るProgressBarの備忘録

2024/10/04に公開

はじめに

WEBアプリ開発の途中で、プログレスバー(ProgressBar)を作成したので、備忘録として残しておきます。

前提

  • React (18.3.1)
  • TailwindCSS

全体コード

import React, { useState, useEffect } from "react";

const Progressbar = () => {
  const [progress, setProgress] = useState("");
  const [progressbar, setProgressbar] = useState("");

  useEffect(() => {
    setProgress("33");
    setProgressbar("w-1/3");
  }, []);

  return (
    <div className="flex justify-center">
      <div className="w-2/4 bg-sky-500 rounded-full h-5 text-center">
        <div className={` bg-blue-500 h-5 rounded-full ${progressbar}`}></div>
        {progress}%
      </div>
    </div>
  );
};

export default Progressbar;

結果

解説

ReactのuseStateとuseEffectを使ってプログレスバー(ProgressBar)を作成しています。
進捗バーの表示と進捗度合い(%)の表示を行うコンポーネントです。

import

import React, { useState, useEffect } from "react";

まず最初に、ReactのuseStateとuseEffectフックをインポートします。
useStateは状態管理、useEffectは処理を行うために使用されます。

変数宣言

const Progressbar = () => {
  const [progressbar, setProgressbar] = useState("");
  const [progress, setProgress] = useState("");

  useEffect(() => {
    setProgress("33");
    setProgressbar("w-1/3");
  }, []);

  return (
        {/* 後述 */}
  );
};

Progressbarコンポーネント内で2つの状態変数progressとprogressbarを定義します。
progressは進捗のパーセンテージ(数値)、progressbarはTailwindCSSクラスを使って進捗バーの幅を管理しています。

useState

  const [progressbar, setProgressbar] = useState("");
  const [progress, setProgress] = useState("");

useStateを使用して状態を初期化します。
デフォルトでは、どちらも空の文字列で初期化されています。
この状態は、後述のuseEffectで更新されます。

useState("");

useEffect

  useEffect(() => {
    setProgress("33");
    setProgressbar("w-1/3");
  }, []);

useEffectは、コンポーネントがレンダリングされた後に実行されるstateを定義しています。
コンポーネントが最初に表示された際に、progressとprogressbarを更新します。
setProgress("33")によって進捗度を33%と表示し、setProgressbar("w-1/3")でバーの幅を全体の3分の1に設定しています。
w-1/3はTailwindCSSのクラスで、幅を親要素の3分の1に指定しています。

return (JSX , TailwindCSS)

  return (
    <div className="flex justify-center">
      <div className="w-2/4 bg-sky-500 rounded-full h-5 text-center">
        <div className={` bg-blue-500 h-5 rounded-full ${progressbar}`}></div>
        {progress}%
      </div>
    </div>
  );

returnでは、JSXを使用して、ProgressBarのレイアウトを描画します。

外側の<div>要素は、flexとjustify-centerクラスを使って、ProgressBarを中央に配置しています。
その中に、w-2/4で幅50%、bg-sky-500で背景色を指定した要素を表示し、その中に進捗バーを配置しています。
progressbarの値は、TailwindCSSのクラスとして設定されており、w-1/3が適用されています。これにより、進捗バーの幅が親要素の3分の1になる仕組みです。
最後に、進捗率{progress}%を表示しています。

export

export default Progressbar;

exportを指定することで、progressbarがコンポーネントとして利用できるようになります。

おわりに

備忘録として、TailwindCSS×React(useState)のprogressbar作成方法をまとめました。
何かの役に立つと幸いです。

Discussion