#Layout
Warning
该组件主要配合 自定义主题 中的 wrap/eject 使用 ,与 MDX 里直接导入使用的组件不同,你可以通过传递组件 props 或直接覆盖该组件达到修改样式和功能的目的。如果通过 eject 覆盖整个组件,需注意组件对应配置项的读取会失效,需要自行控制。
Layout 是 Rspress 的核心布局组件,作为整个页面的布局容器。它提供了丰富的插槽 props,可以在不 eject 的情况下扩展默认主题的布局。
#用法
通过 自定义主题 来使用 Layout 组件:
theme/index.tsx
import { Layout as BasicLayout } from '@rspress/core/theme-original';
const Layout = () => <BasicLayout beforeNavTitle={<div>some content</div>} />;
export { Layout };
export * from '@rspress/core/theme-original';#插槽 Props
Layout 组件设计了一系列的插槽 props 用于扩展默认主题的布局:
theme/index.tsx
import {
Layout as BasicLayout,
getCustomMDXComponent as basicGetCustomMDXComponent,
} from '@rspress/core/theme-original';
const Layout = () => (
<BasicLayout
/* Home 页 Hero 部分之前 */
beforeHero={<div>beforeHero</div>}
/* Home 页 Hero 部分之后 */
afterHero={<div>afterHero</div>}
/* Home 页 Features 部分之前 */
beforeFeatures={<div>beforeFeatures</div>}
/* Home 页 Features 部分之后 */
afterFeatures={<div>afterFeatures</div>}
/* 正文页 Footer 部分之前 */
beforeDocFooter={<div>beforeDocFooter</div>}
/* 正文页 Footer 部分之后 */
afterDocFooter={<div>afterDocFooter</div>}
/* 正文页最前面 */
beforeDoc={<div>beforeDoc</div>}
/* 正文页最后面 */
afterDoc={<div>afterDoc</div>}
/* 文档内容前面 */
beforeDocContent={<div>beforeDocContent</div>}
/* 文档内容后面 */
afterDocContent={<div>afterDocContent</div>}
/* 导航栏之前 */
beforeNav={<div>beforeNav</div>}
/* 导航栏之后 */
afterNav={<div>afterNav</div>}
/* 左上角导航栏标题之前 */
beforeNavTitle={<span>😄</span>}
/* 导航栏标题 */
navTitle={<div>Custom Nav Title</div>}
/* 左上角导航栏标题之后 */
afterNavTitle={<div>afterNavTitle</div>}
/* 导航栏菜单之前 */
beforeNavMenu={<div>beforeNavMenu</div>}
/* 导航栏菜单之后 */
afterNavMenu={<div>afterNavMenu</div>}
/* 左侧侧边栏上面 */
beforeSidebar={<div>beforeSidebar</div>}
/* 左侧侧边栏下面 */
afterSidebar={<div>afterSidebar</div>}
/* 右侧大纲栏上面 */
beforeOutline={<div>beforeOutline</div>}
/* 右侧大纲栏下面 */
afterOutline={<div>afterOutline</div>}
/* 整个页面最顶部 */
top={<div>top</div>}
/* 整个页面最底部 */
bottom={<div>bottom</div>}
/* 自定义 MDX 组件 */
components={{
h1: (props) => {
const { h1: OriginalH1, p: OriginalP } = basicGetCustomMDXComponent();
return (
<>
<OriginalH1 {...props} />
<OriginalP>
This is a custom paragraph added after every H1 heading.
</OriginalP>
</>
);
},
}}
/>
);
export { Layout };
export * from '@rspress/core/theme-original';