Next.js+Tailwind CSS+Storybookでフロントエンド開発②

はじめに

前回まで

Next.js+Tailwind CSS+Storybookの環境構築を完了させました。
今回は各コンポーネントを用意していこうと思います。

  1. 環境構築
  2. Storybookで管理しながらコンポーネントを作成
  3. APIの呼び出し
  4. コンポーネントを組み合わせてレイアウト構築

完成図

今回は下記のコンポーネントを作ることにしました。
テキストボックス、ボタン、抽選パネルを使い回すことになりそうです。

  • ヘッダー
  • セレクトボックス
  • テキストボックス
  • ボタン
  • 抽選パネル

コンポーネントを作成する

今回はTailwind CSSでデザイン設定しつつ、Storybookで確認&管理してみます。

カスタムクラス、画像

カスタムクラスとしてmainBlue,mainLightGray,mainDarkGrayを用意しました。
共通カラーとして使います。

tailwind.css config

画像

ロゴ画像を用意しました。
白文字&透過背景なので見えない!
抽選アプリのロゴ

ヘッダー

Header.tsx

Next.jsのImageコンポーネントを使ってロゴを表示させました。
設定したクラスは下記のCSS設定を意味します。

  • w-full → width: 100%
  • px-5, py-3 → padding: 20px 12px
  • shadow-lg → box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)
  • bg-mainBlue → background-color: #00459c

Header.stories

渡すpropsが無いので、storyは1つです。

セレクトボックス

Select.tsx

ラベルを表示切替えできるようにしました。
大枠の<div>には下記のCSS設定をしています。

  • grid → display: grid
  • gap-y-1 → row-gap: 4px

の枠線には3つのクラスが必要でした。

  • border-solid → border-solid
  • border → border-width: 1px
  • border-mainLightGray → border-color: #b6b6b9

Select.stories.ts

ラベルあり、ラベル無しのstoryを用意しました。

テキストボックス

Input.tsx

Selectと同様、ラベルを表示切替できるようにしました。
クラス設定もほぼ同じです。

Input.stories.ts

こちらもラベルあり、ラベル無しのstoryを用意しました。

ボタン

Button.tsx

create-next-appのサンプルにあったButtonコンポーネントを修正して使っています。(丁度良かった!)
サイズを大中小から選んで使います。
primaryカラーやdisabledの設定が可能です。
disabled時は透過率を30%になるようクラス設定しました。

  • opacity-30 → opacity: 30%

Button.stories.ts

ボタンサイズ、primary、disabledを組み合わせて用意しました。
「Storybookで管理しているぞ!」という気持ちになりました。

抽選パネル

Panel.tsx

一括抽選やリセットに対応できるよう、それぞれpropsにトリガーを用意しました。

パネルに描画する数字の取得方法はpropsで渡せるようにしました。
最終的にはaxiosを使ってAPIから数字を取得する予定です。

パネルを正方形にするため、下記のクラスを設定しています。

  • aspect-square → aspect-ratio: 1 / 1

Panel.stories.ts

数字描画前と後の2種類を用意しました。
コンポーネントの作成完了!

おわりに

コンポーネント作成は以上です。
次回はAPIを呼び出せるように設定していきます。