Markdownのリンクを新規タブで開く
前提
- remark, remark-rehype, rehype-stringify がインストール済みであること
npm i --save-dev remark remark-rehype rehype-stringify
対応方法
rehype-external-linksを使って target 属性を指定します
設定方法
rehype-external-links
をインストールします。
コンポーネント markdownToHtml.js が以下のようなものだとします:
import { remark } from "remark";
import remarkRehype from "remark-rehype";
import rehypeStringify from "rehype-stringify";
import rehypeExternalLinks from "rehype-external-links";
export const markdownToHtml = async (markdown: string) => {
const result = await remark()
.use(remarkRehype, { allowDangerousHtml: true })
.use(rehypeExternalLinks, {
target: "_blank",
rel: ["noopener noreferrer"],
})
.use(rehypeStringify)
.process(markdown);
return result.toString();
};
markdownToHtml.js を使ってページを表示します。
import { InferGetStaticPropsType, NextPage } from "next";
import { markdownToHtml } from "../../lib/markdownToHtml";
type Props = InferGetStaticPropsType<typeof getStaticProps>;
const Home: NextPage<Props> = ({ html }) => {
return (
<div
dangerouslySetInnerHTML={{
__html: html,
}}
></div>
);
};
export const getStaticProps = async () => {
return {
props: {
html: await markdownToHtml(
"[rehype](https://github.com/rehypejs/rehype)"
),
},
};
};
export default Home;
このように出力されます。