MDXProviderを使ってマークダウンの表示を変える
2020年06月26日
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
コンポーネントをレンダリングしています。
コードを見る