2、mdx
mdx
目录
[toc]
.md和.mdx有什么区别吗?
.md
和 .mdx
是两种文件扩展名,用于标识 Markdown 文件,它们之间有几个关键的区别:
.md
文件
- 定义:
.md
文件是标准的 Markdown 文件,采用 Markdown 语法来格式化文本。 - 用途:用于撰写文档、说明书、博客文章等。只能包含 Markdown 支持的文本和格式,例如标题、列表、链接等。
.mdx
文件
- 定义:
.mdx
文件是 Markdown 的扩展,允许在 Markdown 文档中嵌入 JSX(通常用于 React 组件)。 - 用途:适用于需要在文档中插入 React 组件的场景,比如在文档中直接使用可重用的组件、交互式示例等。
总结
.md
:仅支持 Markdown 语法,适合文本内容。.mdx
:支持 Markdown 和 JSX,适合结合 React 组件的文档。
如果你在一个使用 React 或其他框架的项目中,并且需要在文档中使用组件,.mdx
是一个很好的选择,而标准的文档或博客则可以使用 .md
。
1、什么是mdx
MDX 允许你在 Markdown 内容中使用 JSX。你可以导入交互式图表或警报等组件,并将它们嵌入到你的内容中。这使得使用组件编写长篇内容变得非常有趣。
MDX 简而言之
- ❤️ 强大的:MDX 混合了 markdown 和 JSX 语法,完美适合基于 JSX 的项目
- 💻 一切都是一个组件:使用 MDX 中的现有组件并将其他 MDX 文件导入为组件
- 🔧 可定制:决定为每个 markdown 构造渲染哪个组件 (
{h1: MyHeading}
) - 📚 基于 Markdown:Markdown 的简单和优雅仍然存在,只有当你想要时才使用 JSX
- 🔥 速度极快:MDX 没有运行时,所有编译都发生在构建阶段
哈哈 mdx 太棒了
本文介绍什么是 MDX 格式。它展示了如何在 MDX 中使用 ESM 中的 markdown、JSX、JavaScript 表达式以及 import
和 export
语句。 有关如何将 MDX 集成到项目中的详细信息,请参阅 § 入门。
本节摘要:
先决条件(Prerequisites)
要编写并享受MDX,您应该熟悉markdown(参见备忘单和教程获取帮助)和JavaScript(特别是JSX).
组件时代的 Markdown
MDX 允许你在 Markdown 内容中使用 JSX。你可以导入交互式图表或警报等组件,并将它们嵌入到你的内容中。这使得使用组件编写长篇内容变得非常有趣。🚀
更实际的是,MDX 可以解释为一种将 markdown 与 JSX 结合在一起的格式,如下所示:
# Hello, world!
<div className="note">
> Some notable things in a block quote!
</div>
标题和块引用是 markdown,而那些类似 HTML 的标签是 JSX。对于强调或标题等常见内容,Markdown 通常感觉比 HTML 或 JSX 更自然。JSX 是 JavaScript 的扩展,看起来像 HTML,但可以方便地使用组件(可重用的东西)。
此示例在 <div>
上使用 className
。那是因为它是为 React 编写的,而 React 期望类是这样的。其他框架(例如 Vue 和 Preact)期望类的定义不同,因此请注意,根据所使用的工具,JSX 的编写方式存在一些差异。
MDX 还支持 JavaScript 的其他一些功能:大括号 ({1 + 1}
) 和 ESM(import
和 export
)中的表达式。
MDX语法(MDX syntax)
注意:你不必对
@mdx-js/*
包使用此语法。或者一直使用它。如果你使用打包器集成,则可以通过文件扩展名(.mdx
与.md
)在 MDX 和 Markdown 之间进行更改。或者,可以使用options.format
。
MDX 语法将 markdown 与 JSX 结合起来。这给了我们一些类似于文学编程的东西。它还为我们提供了两种语言的奇怪组合:markdown 对空格敏感且宽容(你输入的内容可能不完全有效,但不会崩溃),而 JavaScript 对空格不敏感且不宽容(它确实会因拼写错误而崩溃)。
奇怪的是,我们非常喜欢它们的结合方式!
Markdown
对于强调或标题等常见内容,Markdown 通常感觉比 HTML 或 JSX 更自然。Markdown 通常看起来更符合预期并且更简洁。而不是以下 HTML:
<blockquote>
<p>A blockquote with <em>some</em> emphasis.</p>
</blockquote>
你可以在 markdown (或 MDX)中编写等效内容,如下所示:
> A blockquote with *some* emphasis.
MDX 默认支持标准 Markdown (CommonMark):
# Heading (rank 1)
## Heading 2
### 3
#### 4
##### 5
###### 6
> Block quote
* Unordered
* List
1. Ordered
2. List
A paragraph, introducing a thematic break:
---
```js
some.code()
```
a [link](https://example.com), an
![image](./image.png)
, some *emphasis*,
something **strong**, and finally a little `code()`.
非标准 Markdown 功能(例如 GFM、frontmatter、数学、语法高亮)可以通过插件启用(参见 ¶ 使用插件)。
一些 Markdown 功能在 MDX 中不起作用:
-
缩进代码在 MDX 中不起作用:
console.log(1) // this is a paragraph in MDX!
这样做的原因是这样你可以很好地缩进你的组件:
<main>
<article>
# Hello!
</article>
</main> -
自动链接在 MDX 中不起作用。原因是它们与 JSX 无法区分(例如:
<svg:rect>
),而我们更喜欢明确的。如果你需要链接,请使用完整链接:[descriptive text](https://and-the-link-here.com)
-
HTML 语法在 MDX 中不起作用,因为它已被 JSX(
<img>
到<img />
)取代。你可以使用大括号中的 JavaScript 注释来代替 HTML 注释:{/* comment! */}
未转义的左尖括号/小于 (`<`) 和左大括号 (`{) 必须转义:`<`或`{`(或使用表达式:`<`、`{`)
有关 MDX 与 Markdown 有何不同的更多信息,请参见 记录在这里。