CSS-in-JS
次にCSS-in-JSという手法で、コンポーネント内にCSSも一緒に書くものになります。
その中でもstyled-componentsというライブラリを用いるのが最も人気であり、扱いやすいため、styled-componentsを使った手法を説明します。
まずは、styles-componentsをインストールしましょう。
npm install styled-components
また、TypeScriptでの実装になるので、@types/styled-componentsもインストールします。
npm install @types/styled-components
では、BreadcrumbコンポーネントにCSSを当てていきましょう。まず、Breadcrumb.tsxにstyled-componentsのstyledをimportします。
import { useState } from "react";
import styles from "./Breadcrumb.module.css";
import styled from "styled-components";
...
使い方として、<p>itemがありません。</p>と<p>itemが{items.length}あります</p>にCSSを当てたいとします。その場合styled.p`当てたいCSS`のようにして、CSSを当てたpタグを作成することができます。記述する場所に関してですが、コンポーネントの外側に記述するようにしましょう。以下にてNoticeParagraphというCSSを当てたpタグを生成することができました。
...
type Props = {
items: string[];
};
const NoticeParagraph = styled.p`
font-weight: 100;
color: gray;
`;
...
上記を利用するには、通常のタグのように記述します。
ブラウザにて以下のように確認できるかと思います。
また、styled-componentにて作成したタグもpropsを受け取ることができ、styled.p<型>のようにジェネリクスに型を宣言することで受け取ることができます。
まずは受け取る型エイリアスを宣言しましょう。
宣言した型をジェネリクスにて宣言し、呼び出し方は${(props) => 処理}のように記述します。
今回は、isBlankがtrueの場合はred、falseの場合はgrayの文字列を返却し、colorがisBlankによって変化するようにします。
そして呼び出す部分にて、propsを渡します。ちなみにboolean型のpropsの場合は、trueの場合そのprops名のみを記述するだけでtrueを渡すことができます。
App.tsxにて、空のitemsを渡しましょう。
ブラウザにて以下のように確認できるかと思います。