@@ -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---
177177title: 我的第一篇博客
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
0 commit comments