返回文章列表

使用可复用 MDX 组件增强 Astro 博客

· 2 min read ·
Astro Web开发 组件设计
使用可复用 MDX 组件增强 Astro 博客

写文档和技术博客往往会让人觉得重复单调,视觉上也很单调。大段文字读起来并不有趣,但有了在 Astro 上运行的 MDX(Markdown + JSX),我们可以轻松地将交互式的、精美样式的类 React 组件直接注入到我们的文章中。

在这篇文章中,我们将介绍如何通过自定义设计系统将标准 markdown 博客转变为一个交互式学习体验。

(优雅地)警告读者

有时你需要快速吸引读者的注意力。也许某个依赖已弃用,或者有一个他们应该知道的安全漏洞。我们没有使用粗体文字,而是构建了一个通用的 <Callout /> 组件。

Note

你知道吗? 最新版本的 Astro 允许你在集合中无缝地同时使用标准 markdownmdx 文件!

专业提示:使用 TypeScript

在编写复杂的框架组件时,利用 TypeScript 可以通过提前捕获 prop 验证问题来大幅减少运行时错误。

重大变更

我最近从 Astro v3 迁移到 v5。请确保你的 content.config.ts 已正确更新以使用 astro:content

交互式安装指南

在记录库时,给开发者提供选择是必不可少的。注意有多少顶级文档提供 npmpnpmyarn 安装选项?使用我们的自定义 <Tabs> 组件,提供这种功能完全无摩擦:

Terminal window
npm install @lucide/astro
Terminal window
pnpm add @lucide/astro
Terminal window
yarn add @lucide/astro

遵循流程

我们创建了一个 <Steps> 组件,而不是标准的无序列表(<ul>),它可以自动为教程呈现清晰的垂直时间线:

步骤 1:初始化项目

运行 npm create astro@latest 并选择博客模板,立即获得高度优化的站点脚手架。

步骤 2:添加 Tailwind CSS

运行 npx astro add tailwind 以安全地将最新版本的 Tailwind 安装到你的 UI 层。

步骤 3:编写 MDX

添加 @astrojs/mdx 插件并立即开始编写内容!

一流的代码格式化

我决定集成 Expressive Code。这是一个 Astro 集成,无需使用自定义组件即可自动为你的代码块添加惊人的功能。完全原生支持 MDX!

src/pages/index.astro
---
import Layout from '../layouts/Layout.astro';
import { getCollection } from 'astro:content';
const posts = await getCollection('post');
---
<Layout title="欢迎来到我的博客">
<main>
<h1>你好世界</h1>
</main>
</Layout>

MDX 是一种让你在 Markdown 文档中无缝编写 JSX 的格式。你可以导入组件,如交互式图表或警报,并将它们嵌入到你的内容中。

Chris Coyier CodePen 联合创始人

突出信息

在审查框架或方法论时,ProsCons 列表对于让你的读者快速消化好处非常宝贵:

Pros
  • 开箱即用的精美页面
  • 更高的读者参与度指标
  • 强制执行严格的设计系统一致性
Cons
  • 略微增加初始构建时间
  • 需要作者记住组件语法
编程笔记本
夜间编程:bug 躲藏和功能闪光的地方。

有时解释复杂的架构概念需要视频。我为 MDX 原生构建了一个零布局偏移的 YouTube 嵌入器:

如果你需要引用外部文档,而不是标准超链接,请使用 <LinkCard>

Astro 5.0 发布
Astro 5 来了,带来了新的 Content Layer API、改进的类型安全性和更好的构建性能。
astro.build

有了这些组件,你的技术博客不仅仅信息丰富——它将是一种体验。🎉

# // CONTENTS