Doucsaurus自定义blog列表的分页
· 阅读需 6 分钟
默认情况下,Docusaurus 的 blog 列表分页是「较新的博文/较旧的博文」的形式。如果想改成数字按钮形式,需要自定义分页组件。
我的需求如下:
- 需要一个除了
/blog
以外的路径,例如:/code
- code 列表页可以使用自定义的分页组件,blog 列表页使用默认的分页组件
定义独立的 blog 类型
Docusaurus 允许通过 @docusaurus/plugin-content-blog
为不同路径定义多个独立的博客类型。
修改默认的分页组件
pnpm docusaurus swizzle @docusaurus/theme-classic BlogListPaginator --eject --typescript
修改 src/theme/BlogListPaginator/index.tsx
文件:
import React from 'react';
import type { Props } from '@theme/BlogListPaginator';
import CustomPaginator from '../../components/CustomBlogPaginator';
export default function BlogListPaginator(props: Props): JSX.Element {
return <CustomPaginator {...props} />;
}
创建自定义分页组件
在 src/components
中创建一个 CustomBlogPaginator 组件,目录结构如下:
- src
- components
- CustomBlogPaginator
- CustomPaginator.tsx
- index.module.css
- index.tsx
判断路径中是否包含 /code
,如果是,则使用自定义分页组件,否则使用默认的分页组件。
index.tsx
import React from 'react';
import BlogListPaginator from '@theme-original/BlogListPaginator';
import CustomPaginator from './CustomPaginator';
export default function CodePaginator({ metadata }) {
if (metadata.permalink.includes('/code')) {
return <CustomPaginator metadata={metadata} />;
}
return <BlogListPaginator metadata={metadata} />;
}