MK勉強記

Next.jsでポートフォリオを作ろうpart5

作成日:2024-02-11

更新日:2024-02-12

main image

今回やること

  • ページ内リンクを作成
  • 目次作成
  • デザインを整える
  • 記事ページのh2タグ
  • 横のプロフィール
  • ページ内リンクと目次

    ページ内リンクでは、h2,h3タグのidを入れてそこに#でアクセスするようにします。

    以下はreact-markdownのh2に割り当てるためのH2関数(h3)も同様につくる

    import { ClassAttributes, HTMLAttributes } from "react" import { ExtraProps } from "react-markdown" export const H2 = ({ node }: ClassAttributes<HTMLHeadingElement> & HTMLAttributes<HTMLHeadingElement> & ExtraProps) => { const text = typeof node !== "undefined" && node.children.length > 0 && "value" in node.children[0] ? node?.children[0]["value"] : ""; return <h2 id={text} > {text} </h2> }

    目次のコンポーネントは以下のように作成しました。

    <div className="w-full md:w-1/2 mx-auto bg-light-gray border-2 border-mid-gray my-4"> <p className="text-center bg-mid-gray text-white text-xl py-2"> 目次 </p> <ReactMarkdown allowedElements={["h2", "h3"]} className='agenda' // このclassNameはglobals.cssで作成(Tailwind css) components={{ h2: ({ node }) => { const text = typeof node !== "undefined" && node.children.length > 0 && "value" in node.children[0] ? node?.children[0]["value"] : ""; return <h2> <a href={`#${text}`}>{`${text}`}</a> </h2> }, h3: ({ node }) => { const text = typeof node !== "undefined" && node.children.length > 0 && "value" in node.children[0] ? node?.children[0]["value"] : ""; return <h3> <a href={`#${text}`}>{`${text}`}</a> </h3> }, }} > {data.body} </ReactMarkdown> </div>

    Untitled.png

    ↑こんな感じになった

    あとはいい感じにデザインを整えた。

    プロフィール欄にSNSアカウントを載せようと思っているんだが、早くデプロイしたくて実装するのがめんどくさい。あと、アカウントがない…

    今回はこれでおわり

    Profile

    profile photo

    地方公立大学院修士2年。

    今年は「知識の幅を縦に広げること」が目標で、低レイヤ、OS、ミドルウェア、コンテナ、ネットワーク、データベース、SEO対策の勉強しています。

    情報処理安全確保支援士と応用情報は合格しています。

    研究として楕円曲線暗号、耐量子暗号、格子暗号や格子基底簡約アルゴリズム、同種写像暗号について学習しています。

    普段はアルバイトでFlutter/Go/GCP/Next.js/Reactを使っています。