筋肉チョットデキル

MDXProviderを使ってマークダウンの表示を変える

2020年06月26日

技術ブログGatsby

MDXを使う準備

この記事ではMDXを使った前提で進めます。MDXは不要でシンプルなMarkdownで良い方は適宜読み替えていただけると幸いです。
MDXとは、Markdownで簡潔に記述し、かつより高度で再利用可能なJSXも埋め込めるものです。

インストール

yarn add gatsby-plugin-mdx @mdx-js/mdx @mdx-js/react

gatsby.configに追記

module.exports = {
plugins: [
`gatsby-plugin-mdx`,
],
}

gatsby-node.jsでページを作成

詳細は割愛しますが、CreatePages APIの、CreatePage アクションを使ってページを作成します。
テンプレートファイルに./src/templates/blog-post/index.jsを指定しているので、あとでこのファイルを見ていきます。

コードを見る

MDXProviderでコンポーネントの定義をマッピングする

MDXProviderを使うことで、MDXコンテンツ内のタグのレンダリングを置き換えることができます。
例えば<h1>の色を変えたい場合、以下のようにMDXProviderにオブジェクトを渡します。

import { MDXProvider } from "@mdx-js/react"
const MyH1 = props => <h1 style={{ color: "tomato" }} {...props} />
const components = {
h1: MyH1,
}
export const wrapRootElement = ({ element }) => (
<MDXProvider components={components}>{element}</MDXProvider>
)

自分の場合は、
コンテンツのレンダリングの定義をsrc/components/MDXComponents/index.jsでしています。
表示結果を変えたい場合はこのファイルをいじってます。

コードを見る

記事のコンテンツのコンポーネント内(src/components/ContentArticle.js)でMDXProviderを使ってマッピングしています。

コードを見る

そして、gatsby-node.jsで指定したテンプレートファイル内(src/templates/blog-post/index.js)でContentArticleコンポーネントをレンダリングしています。

コードを見る

岡本 侑貴@筋肉チョットデキル

筋肉バカ。筋トレしてコード書いて、毎日幸せに生きてる。ボディビルにドハマリ。2021年東京オープンボディビル選手権で最高の身体に仕上げてつよつよエンジニアになる!!

Made with Gatsby& ChakraUi

Yuuki Okamoto • 2020