mdx的使用建议
个人观点:少用 MDX 格式,因为缺少很好的 MDX 编辑器。MDX 的最终展示效果虽然经验,但编辑过程十分别扭(所见非所得),效率低下。
一、MDX 和 MD 混合模式
默认情况,Docusaurus 使用 MDX 解析器解析所有文章,我们可以修改配置让 Docusaurus 根据文档的后缀选择解析器:
docusaurus.config.js
markdown: {
// 可以设置为 md | mdx | detect
format: 'detect',
},
选项 | 文档后缀 .md | 文档后缀 .mdx |
---|---|---|
mdx(默认) | MDX | MDX |
md | Markdown | Markdown |
detect(推荐) | Markdown | MDX |
detect 对 Markdown 更加友好。
二、快速上手 Docusaurus 中 MDX
2.1 基础语法
MDX 允许在 Markdown 中直接混合 JSX 语法。
# 这是一个 MDX 文件
常规的 **Markdown** 内容。
<div style={{ padding: 20, background: '#868988' }}>
这是嵌入的 JSX 代码块,可以设置 CSS 样式。
</div>
这是嵌入的 JSX 代码块,可以设置 CSS 样式。
2.2 使用 React 组件
a. 导入自定义组件
import MyButton from '@site/src/components/MyButton';
点击这个按钮:<MyButton>提交</MyButton>
点击这个按钮:
b. 使用 Docusaurus 内置组件
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
## 选项卡示例
<Tabs>
<TabItem value="js" label="JavaScript">
这里是 JavaScript 代码示例。
</TabItem>
<TabItem value="py" label="Python">
这里是 Python 代码示例。
</TabItem>
</Tabs>
- JavaScript
- Python
这里是 JavaScript 代码示例。
这里是 Python 代码示例。
2.3 动态内容
a. 嵌入可交互组件
import { useState } from 'react';
计数器示例:
export function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
点击次数:{count}
</button>
);
}
<Counter />
计数器示例:
b. 动态加载数据
import { useState, useEffect } from 'react';
API 数据示例:
export function UserData() {
const [data, setData] = useState(null);
useEffect(() => {
fetch('https://api.example.com/users')
.then(res => res.json())
.then(setData);
}, []);
return (
<div>
{data ? <pre>{JSON.stringify(data, null, 2)}</pre> : '加载中...'}
</div>
);
}
<UserData />