スマレジエンジニアyushiのブログ

スマレジエンジニアのブログ

【自作ブログ #5】Component分割

自作ブログを作っています。

yushi-dev.hatenablog.com

技術スタック

  • TypeScript
  • React
  • Next.js
  • Styled Components
  • GitHub Pages

今回は、Component分割を行います。

Component分割とは

Reactのチュートリアルには下記のような記述があります。

React はユーザインターフェイスを構築するための、宣言型で効率的で柔軟な JavaScript ライブラリです。 複雑な UI を、「コンポーネント」と呼ばれる小さく独立した部品から組み立てることができます。

ja.legacy.reactjs.org

この文章やチュートリアルの内容から分かるように、Reactではコンポーネント単位に分割しながら実装を進めていきます。

記事詳細画面のComponent分割

今回は、記事詳細ページから、記事内容の部分をコンポーネントとして切り出してみます。

(ArticleComponent.tsx)

import dayjs from '@/lib/dayjs'

type Props = {
  content: string
  date: dayjs.Dayjs
  title: string
}

const ArticleContent = ({ content, title, date }: Props) => {
  return (
    <article>
      <small>{date.format('YYYY-MM-DD')}</small>
      <h1>{title}</h1>
      <div dangerouslySetInnerHTML={{ __html: content }} />
    </article>
  )
}

export default ArticleContent

記事の内容やメタ情報(タイトルや作成日)は、親コンポーネントから渡すようにします。
本コーポネントはあくまで表示を司るようにするためです。

これを記事画面に埋め込みます。

([slug].tsx)

     <>
-      <small>{dayjs(date).format('YYYY-MM-DD')}</small>
-      <h1>{title}</h1>
-      <div dangerouslySetInnerHTML={{ __html: content }} />
+      <ArticleContent content={content} date={dayjs(date)} title={title} />
     </>
  )

これで、「ページ」という構造と中身の表示という詳細なUIを分離して管理できるようになりました。

Pull Request

https://github.com/nek0meshi/blog/pull/8

あとがき

先日受験した給与計算実務能力検定2級について、無事合格することができました。

タイムカードの開発のために必要な知識ですが、改めて基礎から勉強できたこと、資格という形に残せたことはとても良かったと思っています。

そうでなくとも給与という形で収入得ている多くの人にとって、持っていて損のない知識かもしれません。

timecard.smaregi.jp