MDX で React コンポーネントを使う
• 約4分
MDX で React コンポーネントを使う 🚀
このページでは、MDX内でReactコンポーネントをインポートして使用する方法を実演します。
1. シンプルなカウンター
通常のMarkdownテキストの中に、Reactコンポーネントを埋め込むことができます:
React Counter
10
Current count: 10
上のカウンターは完全にインタラクティブなReactコンポーネントです!
コード例
import Counter from "@components/Counter.tsx";
// MDX内で使用
<Counter client:load initialCount={10} />
2. Todo リスト
もっと複雑な状態管理を持つコンポーネントも問題なく動作します:
React Todo List
- Astroを学ぶ
- Reactコンポーネントを作る
- MDXを使いこなす
完了: 2 / 全体: 3
このTodoリストは:
- ✅ 状態管理(useState)
- ✅ イベントハンドリング
- ✅ 条件付きレンダリング
- ✅ TypeScript型定義
すべてが完璧に機能しています!
3. タブコンポーネント
DaisyUIのスタイルを使用したタブUIも簡単に実装できます:
概要
ReactコンポーネントをMDX内で使用することで、インタラクティブなUIを簡単に構築できます。
4. 複数のカウンター
同じコンポーネントを異なる初期値で複数配置することも可能:
React Counter
0
Current count: 0
React Counter
100
Current count: 100
React Counter
-50
Current count: -50
Astro の Client Directives
Reactコンポーネントを使用する際は、client:* ディレクティブを指定します:
client:load- ページロード時に即座にハイドレーションclient:idle- メインスレッドがアイドル状態になったらハイドレーションclient:visible- コンポーネントがビューポートに入ったらハイドレーションclient:media- 特定のメディアクエリに一致したらハイドレーションclient:only- サーバーサイドレンダリングをスキップ
例
<Counter client:load /> // 即座に読み込み
<Counter client:idle /> // アイドル時に読み込み
<Counter client:visible /> // 表示時に読み込み
<Counter client:only="react" /> // クライアントのみ
コンポーネントファイル構造
src/
├── components/
│ ├── Counter.tsx # Reactコンポーネント
│ ├── TodoList.tsx # Reactコンポーネント
│ └── Tabs.tsx # Reactコンポーネント
└── content/
└── blog/
└── react-in-mdx.mdx # このファイル
メリット
- 再利用性 - 一度作ったコンポーネントを複数のMDX記事で使用可能
- 型安全 - TypeScriptで型チェックが効く
- モジュール性 - 複雑なロジックをカプセル化
- エコシステム - npmの豊富なReactライブラリを活用可能
- パフォーマンス - Astroの部分的ハイドレーションで最適化
まとめ
MDX + React + Astro の組み合わせにより:
- 📝 Markdownの書きやすさ
- ⚛️ Reactの強力なコンポーネントシステム
- ⚡️ Astroの高速なパフォーマンス
すべてを同時に享受できます!
ヒント: Reactコンポーネント内でdaisyUIのクラスが自由に使えます!