作成日:2024-02-11
更新日:2024-02-12
ページ内リンクでは、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>
↑こんな感じになった
あとはいい感じにデザインを整えた。
プロフィール欄にSNSアカウントを載せようと思っているんだが、早くデプロイしたくて実装するのがめんどくさい。あと、アカウントがない…
今回はこれでおわり
Profile
地方公立大学院修士2年。
今年は「知識の幅を縦に広げること」が目標で、低レイヤ、OS、ミドルウェア、コンテナ、ネットワーク、データベース、SEO対策の勉強しています。
情報処理安全確保支援士と応用情報は合格しています。
研究として楕円曲線暗号、耐量子暗号、格子暗号や格子基底簡約アルゴリズム、同種写像暗号について学習しています。
普段はアルバイトでFlutter/Go/GCP/Next.js/Reactを使っています。