cd ..
November 25, 2025 5 min read

MDX 的魔法:从文本到交互

MDX 的魔法:从文本到交互

MDX (Markdown JSX) 是一种极其强大的格式。它不仅仅是“带样式的文本”,它实际上是一个可以在文章中运行 React 组件的运行时环境

这篇博文本身就是一个演示。你可以点击下面的按钮,它们不仅仅是图片,而是真实的、运行中的代码。

1. 基础交互:状态管理

这是一个完全嵌入在 Markdown 中的 React 计数器组件。它拥有自己的 useState 状态,且独立于页面其他部分运行。

Interactive StateCount: 0

试着点击上面的 +-。你会发现数字在实时变化。这意味着我们可以在博客文章里写迷你应用程序


2. 语义化提示框 (Callouts)

普通的 Markdown 引用块 > 有点乏味。我们可以封装一个 <Callout /> 组件来传达不同情绪的信息。

Did you know?

Astro 的 MDX 集成默认支持 GitHub Flavored Markdown (GFM),包括表格和任务列表。

Performance Tip

虽然 MDX 很强大,但请注意:每一个嵌入的 React 组件都会增加页面的 JS 体积。请配合 client:visible 使用。

Common Mistake

不要在 MDX 中直接定义复杂的 React 组件逻辑,最好将它们提取到单独的 .tsx 文件中引入,以保持文章整洁。


3. 嵌入式投票 (Interactive Poll)

既然 MDX 支持 React,我们就可以在文章中嵌入复杂的交互逻辑,比如一个实时投票组件。这对于收集读者反馈非常有用。

你更喜欢哪种前端框架?

当你点击选项时,你会看到一个平滑的动画展示了模拟的投票结果。这展示了 MDX 处理用户事件和动态样式的能力。


4. 数据可视化 (Chart Demo)

除了代码和文本,MDX 还可以轻松处理复杂的数据可视化。这里有一个用 SVG 和 Framer Motion 绘制的交互式折线图。

Analytics
User Growth
Live
MonTueWedThuFriSatSun

5. 自由混排动画

最疯狂的是,你可以直接使用 Framer Motion 的动画组件来排版你的文字。

上面这两个方块和圆球,并不是 GIF 图,而是实时渲染的 DOM 节点。这意味着它们是矢量、高清且可交互的。

结论

MDX 模糊了“内容”与“应用”的界限。对于技术博客来说,它是解释复杂概念的神器。你可以:

  1. 用交互式图表解释算法复杂度。
  2. 用可拖拽的滑块演示 CSS 属性的变化。
  3. 用 3D 模型展示 WebGL 的魅力。

The limit is your imagination.