内联组件
导入组件
/snippets/ 文件夹中。更多信息请参阅 可复用片段。
不支持嵌套导入。请将所有被引用的组件直接导入到父 MDX 文件中。
snippets/ 中创建一个组件文件:
/snippets/color-generator.jsx
注意事项
- 客户端渲染:大多数自定义组件在页面加载后于浏览器中渲染,因此不会出现在服务端渲染的 HTML 中。这适用于你从 snippet 中按名称导入的组件(例如
import { ColorGenerator } from "/snippets/color-generator.jsx"),以及你在 MDX 文件中使用export定义的大多数组件。你作为内容导入的 MDX snippet(例如import MySnippet from "/snippets/my-snippet.mdx")会在服务端渲染。使用export定义的组件如果是简单模板,也会在服务端渲染。它只能将 props 放入 HTML 元素和内置组件中,不能使用 state、hooks、函数调用、条件判断、事件处理程序或style属性。每个使用它的地方都只能传入纯字符串属性,例如<HeroCard title="Quickstart" href="/quickstart" />。 - SEO:由于自定义组件不在初始 HTML 中,搜索引擎可能无法完全索引其内容。
- 首次加载:在自定义组件渲染期间,访客可能会看到闪烁或布局偏移。对于必须出现在初始 HTML 中或加载时不能发生偏移的内容,请改用内置组件,例如卡片和分栏。大多数内置组件都会在服务端渲染。
- 可访问性:确保屏幕阅读器能够播报动态内容的变化。
- 优化依赖数组:仅在
useEffect中包含必要的依赖。 - 缓存昂贵操作:在适当之处使用
useMemo或useCallback。 - 减少重新渲染:将大型组件拆分为较小的组件。
- 懒加载:组件代码无法懒加载。所有组件都会随页面一起加载。如果某个组件在挂载时会执行资源密集型操作(例如获取数据或进行大量计算),请使用条件渲染,将其挂载推迟到用户交互时。