目次
レイアウトの設定
カスタムマークダウン要素
MDXおよびカスタムコンポーネント
サブコンポーネントを直接動作させます
要約します
MDXの詳細
ホームページ ウェブフロントエンド CSSチュートリアル MDXカスタム要素とショートコードを使用します

MDXカスタム要素とショートコードを使用します

Apr 06, 2025 am 09:35 AM

MDXカスタム要素とショートコードを使用します

MDXは、ブログ、スライドショー、コンポーネントドキュメントなどのコンテンツの強力な機能です。これにより、HTML要素、そのフォーマット、場所を心配することなくマークダウンを書き、必要に応じてカスタムリアクションコンポーネントの魔法を組み込むことができます。

この魔法を利用して、Markdown要素を独自のMDXコンポーネントに置き換えてMDXをカスタマイズする方法を見てみましょう。その過程で、これらのコンポーネントを使用するときに「短いコード」の概念を紹介します。

ここのコードスニペットはGatsbyjsとReactに基づいていることに注意する必要がありますが、MDXは異なるフレームワークでも使用できます。 MDXの開始を知る必要がある場合は、ここから始めてください。この記事では、このコンテンツをより高度なコンセプトに拡張します。

レイアウトの設定

ほとんどの場合、MDXベースのページをユニバーサルレイアウトでレンダリングしたいと考えています。このようにして、それらはウェブサイト上の他のコンポーネントと配置できます。使用しているMDXプラグインを使用して、デフォルトのレイアウトコンポーネントを指定できます。たとえば、 gatsby-plugin-mdxプラグインを次のように使用してレイアウトを定義できます。

 <code>{ resolve: `gatsby-plugin-mdx`, options: {  defaultLayouts: {   default: path.resolve('./src/templates/blog-post.js'),  },  // ...其他选项 } }</code>
ログイン後にコピー

これにはsrc/templates/blog-post.jsファイルに、受信するchildren小道具をレンダリングするコンポーネントが含まれる必要があります。

 <code>import { MDXRenderer } from 'gatsby-plugin-mdx'; function BlogPost({ children }) { return (</code> {子供たち}
 );
}


デフォルトのblogpostをエクスポートします。
ログイン後にコピー

プログラムでページを作成する場合、Gatsbyドキュメントで説明されているように、 MDXRendererというコンポーネントを使用して同じ機能を実現する必要があります。

カスタムマークダウン要素

MDXは、カスタムHTMLを作成してコンポーネントを反応させることを可能にする形式ですが、そのパワーはカスタムコンテンツでマークダウンをレンダリングすることです。しかし、これらのマークダウン要素が画面上でどのようにレンダリングされるかをカスタマイズしたい場合はどうなりますか?

私たちは確かにそれのためのリマーケブプラグインを書くことができますが、MDXは私たちにより良いより簡単な解決策を提供します。デフォルトでは、MarkDownは次の要素の一部をレンダリングします。

これらのデフォルト値をカスタムReactコンポーネントに置き換えるために、MDXにはMDXProviderというプロバイダーコンポーネントが付属しています。 React Context APIに依存して、新しいカスタムコンポーネントを注入し、MDXが提供するデフォルト値にマージします。

 <code>import React from 'react'; import { MDXProvider } from "@mdx-js/react"; import Image from './image-component'; function Layout({ children }) { return (<mdxprovider components="{{" h1:><h1 classname="text-xl font-light"></h1></mdxprovider></code> 、
   IMG:画像、
  }}>
   {子供たち}

 );
}


デフォルトのレイアウトをエクスポートします。
ログイン後にコピー

この例では、MDXファイルのH1タイトル(#)は、プロバイダーコンポーネントのプロップで指定されたカスタム実装に置き換えられますが、他のすべての要素は引き続きデフォルト値を使用します。言い換えれば、 MDXProvider 、H1要素に対して作成したカスタムタグを取得し、MDXデフォルトとマージし、MDXファイルにタイトル1(#)を記述するときにカスタムタグを適用できます。

MDXおよびカスタムコンポーネント

カスタムMDX要素は素晴らしいですが、独自のコンポーネントを混ぜたい場合はどうでしょうか。

 <code>--- title: 导入组件--- import Playground from './Playground';以下是关于我一直在构建的`Playground`组件的介绍:<playground></playground></code>
ログイン後にコピー

コンポーネントをMDXファイルにインポートし、任意のReactコンポーネントと同じように使用できます。もちろん、これはブログ投稿のコンポーネントデモに最適ですが、すべてのブログ投稿で遊び場を使用したい場合はどうなりますか?それらをすべてのページにインポートするのは苦痛です。代わりに、MDXはショートコードを使用するオプションを提供します。以下は、MDXドキュメントの短いコードの説明です。

[ショートコード]アプリケーションまたはWebサイトのすべてのドキュメントにコンポーネントを公開できます。これは、YouTube Embed、Twitterカード、またはドキュメントでよく使用されるものなどの一般的なコンポーネントにとって便利な機能です。

MDXアプリケーションにショートコードを含めるには、 MDXProviderコンポーネントに再度依存する必要があります。

 <code>import React from 'react'; import { MDXProvider } from "@mdx-js/react"; import Playground from './playground-wrapper'; function Layout({ children }) { return (<mdxprovider components="{{" h1:><h1 classname="text-xl font-light"></h1></mdxprovider></code> 、
   遊び場、
  }}>
   {子供たち}

 );
}


デフォルトのレイアウトをエクスポートします。
ログイン後にコピー

componentsオブジェクトにカスタムコンポーネントを含めると、MDXファイルをインポートせずに使用し続けることができます。

 <code>--- title: 演示概念---这是新概念的演示:<playground></playground> > 看,妈妈!不需要导入</code>
ログイン後にコピー

サブコンポーネントを直接動作させます

Reactでは、トップレベルのAPIを取得してReactを使用して子供のコンポーネントを操作します。これらのAPIを使用して、新しい小道具を子供のコンポーネントに渡すことができ、それにより注文を変更したり、可視性を決定したりできます。 MDXは、MDXが渡されたサブコンポーネントにアクセスするための特別なラッパーコンポーネントを提供します。

ラッパーを追加するには、以前と同じようにMDXProvider使用できます。

 <code>import React from "react"; import { MDXProvider } from "@mdx-js/react"; const components = { wrapper: ({ children, ...props }) => {  const reversedChildren = React.Children.toArray(children).reverse();  return {reversedChildren}>; }, }; export default (props) => (<mdxprovider components="{components}"></mdxprovider></code> {props.children}

);
ログイン後にコピー

この例は、私たちが書いた順序の反対の順序で表示されるように、子要素を反転させます。

私たちは、すべての入ってくるMDXサブ要素をアニメーション化することもできます。

 <code>import React from "react"; import { MDXProvider } from "@mdx-js/react"; import { useTrail, animated, config } from "react-spring"; const components = { wrapper: ({ children, ...props }) => {  const childrenArray = React.Children.toArray(children);  const trail = useTrail(childrenArray.length, {   xy: [0, 0],   opacity: 1,   from: { xy: [30, 50], opacity: 0 },   config: config.gentle,   delay: 200,  });  return (</code>
    {trail.map(({xy:[x、y]、ofacity}、index)=>(
<animated.div key="{index}" style="{{" transform: x.interpolate> `translate3d($ {x} px、$ {y} px、0)`)、不透明}}>
      {childerArray [index]}
</animated.div>
    ))}

  );
 }、
};


エクスポートデフォルト(PROPS)=>(
<mdxprovider components="{components}">
<main>{props.children}</main>
</mdxprovider>
);
ログイン後にコピー

要約します

MDXは、柔軟性を備えて設計されていますが、プラグインエクステンションではより強力にすることができます。 gatsby-plugin-mdxのおかげで、短期間で以下を行うことができます。

  1. MDX出力のフォーマットに役立つデフォルトのレイアウトコンポーネントを作成します。
  2. マークダウンからレンダリングされたデフォルトのHTML要素をカスタムコンポーネントに置き換えます。
  3. ショートコードを使用して、各ファイルにコンポーネントをインポートする手間を取り除きます。
  4. 子要素を直接操作してMDX出力を変更します。

繰り返しますが、これはMDXが静的なWebサイトのコンテンツの作成を簡素化するのに役立つもののほんの一部です。

MDXの詳細

  • MDXの紹介
  • フロントエンドドキュメント、スタイルガイド、MDXの台頭

以上がMDXカスタム要素とショートコードを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GraphQLキャッシングの使用 GraphQLキャッシングの使用 Mar 19, 2025 am 09:36 AM

最近GraphQLの作業を開始した場合、またはその長所と短所をレビューした場合、「GraphQLがキャッシュをサポートしていない」または

Redwood.jsと動物相を使用してイーサリアムアプリを構築します Redwood.jsと動物相を使用してイーサリアムアプリを構築します Mar 28, 2025 am 09:18 AM

最近のビットコインの価格が20k $ $ USDを超えており、最近30Kを破ったので、イーサリアムを作成するために深く掘り下げる価値があると思いました

Eleventyで独自のBragdocを作成します Eleventyで独自のBragdocを作成します Mar 18, 2025 am 11:23 AM

開発者としての段階に関係なく、私たちが完了したタスクは、大小を問わず、個人的および専門的な成長に大きな影響を与えます。

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

それは&#039; Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

ブラウザから有効なCSSプロパティ値を取得できますか? ブラウザから有効なCSSプロパティ値を取得できますか? Apr 02, 2025 pm 06:17 PM

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

CI/CDで少し CI/CDで少し Apr 02, 2025 pm 06:21 PM

「ウェブサイト」は「モバイルアプリ」よりも適していると言いますが、Max Lynchからのこのフレーミングが好きです。

粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード 粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード Apr 03, 2025 am 10:30 AM

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。

レスポンシブデザインのブラウザを比較します レスポンシブデザインのブラウザを比較します Apr 02, 2025 pm 06:25 PM

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

See all articles