Skip to content

Commit 75ae689

Browse files
i18n(zh-cn): Update mdx.mdx (#12765)
Co-authored-by: Yan <[email protected]>
1 parent f522d1e commit 75ae689

File tree

3 files changed

+47
-25
lines changed

3 files changed

+47
-25
lines changed

src/content/docs/zh-cn/guides/content-collections.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,8 @@ const { Content, headings } = await render(entry);
419419
<Content />
420420
```
421421

422+
<ReadMore>在处理 MDX 条目时,你也可以 [将自定义组件传递给 `<Content />`](/zh-cn/guides/integrations-guide/mdx/#将-components-传给-mdx-内容),使用自定义组件替换 HTML 元素。</ReadMore>
423+
422424
#### 将内容作为 props 传递
423425

424426
组件还可以将整个集合条目作为 prop 传递。

src/content/docs/zh-cn/guides/integrations-guide/mdx.mdx

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ author: 'Houston'
172172

173173
[MDX 文档](https://mdxjs.com/docs/what-is-mdx/#esm)中查看有关使用导入和导出语句的更多示例。
174174

175-
```mdx title="src/blog/post-1.mdx" {4,9}
175+
```mdx title="src/blog/post-1.mdx" {4,10}
176176
---
177177
title: 我的第一篇博客
178178
---
@@ -184,47 +184,67 @@ import ReactCounter from '../components/ReactCounter.jsx';
184184

185185
<ReactCounter client:load />
186186
```
187+
#### 将自定义组件分配给 HTML 元素
187188

188-
#### 使用导入的 MDX 自定义组件
189+
使用 MDX,你可以将 Markdown 语法映射到自定义组件,而不是它们的标准 HTML 元素。这允许你以标准的 Markdown 语法编写,但是将特殊的组件样式应用于所选的元素。
189190

190-
渲染导入的 MDX 内容时,可以通过 `components` 属性传递 [自定义组件](#将自定义组件分配给-html-元素)
191+
例如,你可以创建一个 `Blockquote.astro` 组件来为 `<blockquote>` 内容提供自定义样式:
191192

192-
```astro title="src/pages/page.astro" "components={{...components, h1: Heading }}"
193+
```astro title="src/components/Blockquote.astro"
193194
---
194-
import { Content, components } from '../content.mdx';
195-
import Heading from '../Heading.astro';
195+
const props = Astro.props;
196196
---
197-
<!-- 为 # 语法创建自定义<h1>, _并且_ 在`content.mdx`中应用任何自定义组件 -->
198-
<Content components={{...components, h1: Heading }} />
197+
<blockquote {...props} class="bg-blue-50 p-4">
198+
<span class="text-4xl text-blue-600 mb-2">“</span>
199+
<slot /> <!-- 请务必为子组件添加 `<slot/>`! -->
200+
</blockquote>
199201
```
200202

203+
将你的自定义组件导入 `.mdx`文件,然后将标准 HTML 元素映射到自定义组件的 `components` 对象以导出:
204+
205+
```mdx title="src/blog/posts/post-1.mdx"
206+
import Blockquote from '../components/Blockquote.astro';
207+
export const components = {blockquote: Blockquote}
208+
209+
> 这个引用将是自定义引用块组件。
210+
```
211+
访问 [MDX 网站](https://mdxjs.com/table-of-components/),了解可以覆盖为自定义组件的 HTML 元素的完整列表。
212+
201213
:::note
202-
在 MDX 文件中定义并导出的自定义组件必须通过 `components` 属性导入并传递回 `<Content />` 组件。
214+
在 MDX 文件中定义并导出的自定义组件必须始终先被导入,然后通过 `components` 属性传回给 `<Content />` 组件。
203215
:::
204216

205-
#### 将自定义组件分配给 HTML 元素
217+
#### `components` 传给 MDX 内容
206218

207-
使用 MDX,你可以将 Markdown 语法映射到自定义组件,而不是它们的标准 HTML 元素。这允许你以标准的 Markdown 语法编写,但是将特殊的组件样式应用于所选的元素
219+
在使用 `<Content />` 组件渲染导入的 MDX 内容时(包括使用内容集合渲染 MDX 条目),可以通过 `components` 属性传入自定义组件。这些组件必须先被导入,才能使 `<Content />` 组件可用
208220

209-
将自定义组件导入 `.mdx`文件,然后将标准 HTML 元素映射到自定义组件的 `components` 对象以导出:
221+
`components` 对象将 HTML 元素名称(`h1``h2``blockquote` 等)映射到你的自定义组件。你也可以使用扩展运算符(...)[包含从 MDX 文件本身导出的所有组件](#将自定义组件分配给-html-元素),这些组件也必须作为 `components` 从你的 MDX 文件中导入。
210222

211-
```mdx title="src/blog/posts/post-1.mdx"
212-
import Blockquote from '../components/Blockquote.astro';
213-
export const components = {blockquote: Blockquote}
223+
如果你直接从单个文件导入 MDX 在 Astro 组件中使用,请同时导入 `Content` 组件以及你 MDX 文件中导出的任何组件。
214224

215-
> 这个引用将是自定义引用块组件。
225+
```astro title="src/pages/page.astro" "components={{...components, h1: Heading }}" {2}
226+
---
227+
import { Content, components } from '../content.mdx';
228+
import Heading from '../Heading.astro';
229+
---
230+
<!-- 为 # 语法创建自定义<h1>, _并且_ 在`content.mdx`中应用任何自定义组件 -->
231+
<Content components={{...components, h1: Heading }} />
216232
```
217233

218-
```astro title="src/components/Blockquote.astro"
234+
如果你的 MDX 文件是内容集合中的一条条目,则使用来自 `astro:content``render()` 函数来访问 `<Content />` 组件。
235+
236+
下面的示例通过 `components` 属性向 `<Content />` 组件传入一个自定义标题,以取代所有 `<h1>` HTML 元素:
237+
238+
239+
```astro title="src/pages/blog/post-1.astro" ins="components={{ h1: CustomHeading }}"
219240
---
220-
const props = Astro.props;
241+
import { getEntry, render } from 'astro:content';
242+
import CustomHeading from '../../components/CustomHeading.astro';
243+
const entry = await getEntry('blog', 'post-1');
244+
const { Content } = await render(entry);
221245
---
222-
<blockquote {...props} class="bg-blue-50 p-4">
223-
<span class="text-4xl text-blue-600 mb-2">“</span>
224-
<slot /> <!-- 请务必为子组件添加 `<slot/>`! -->
225-
</blockquote>
246+
<Content components={{ h1: CustomHeading }} />
226247
```
227-
访问 [MDX 网站](https://mdxjs.com/table-of-components/),了解可以覆盖为自定义组件的 HTML 元素的完整列表。
228248

229249
## 配置
230250

@@ -379,7 +399,7 @@ export default defineConfig({
379399
<p><Since pkg="@astrojs/mdx" v="3.0.0" /></p>
380400
以前称为 `customComponentNames`
381401

382-
`optimize` 的一个可选属性,用于防止 MDX 优化器处理某些元素名称,例如通过 components 属性传递给导入的 MDX 内容的[自定义组件](/zh-cn/guides/integrations-guide/mdx/#使用导入的-mdx-自定义组件)
402+
`optimize` 的一个可选属性,用于防止 MDX 优化器处理某些元素名称,例如通过 components 属性传递给导入的 MDX 内容的[自定义组件](/zh-cn/guides/integrations-guide/mdx/#将-components-传给-mdx-内容)
383403

384404
你需要将这些组件从优化中排除,因为优化器会急切地将内容转换为静态字符串,这将破坏需要动态呈现的自定义组件。
385405

src/content/docs/zh-cn/reference/directives-reference.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ import api from '../db/api.js';
115115

116116
默认情况下,UI 框架组件不会在客户端激活。如果没有 `client:*` 指令,它的 HTML 将被渲染到页面上,而无需 JavaScript。
117117

118-
客户端指令只能用于直接引入到 `.astro` 组件中的 UI 框架组件。 使用 [动态标签](/zh-cn/reference/astro-syntax/#动态标签)[通过 `components` prop 传递的自定义组件](/zh-cn/guides/integrations-guide/mdx/#使用导入的-mdx-自定义组件) 时,不支持 Hydration 指令。
118+
客户端指令只能用于直接引入到 `.astro` 组件中的 UI 框架组件。 使用 [动态标签](/zh-cn/reference/astro-syntax/#动态标签)[通过 `components` prop 传递的自定义组件](/zh-cn/guides/integrations-guide/mdx/#将-components-传给-mdx-内容) 时,不支持 Hydration 指令。
119119

120120
### `client:load`
121121

0 commit comments

Comments
 (0)