Nextra 集成 Giscus 评论系统
本提示词帮助你快速为 Nextra 博客集成 Giscus 评论系统。
快速实现步骤
1. 安装依赖
bun add @giscus/react2. 创建评论组件 src/components/GiscusComments/index.tsx
'use client'
import Giscus from '@giscus/react'
import { useTheme } from 'next-themes'
interface GiscusCommentsProps {
lang: string
}
export function GiscusComments({ lang }: GiscusCommentsProps) {
const { resolvedTheme } = useTheme()
return (
<div className="mt-8">
<Giscus
id="comments"
repo="your-username/your-repo"
repoId="YOUR_REPO_ID"
category="General"
categoryId="YOUR_CATEGORY_ID"
mapping="og:title"
strict="0"
reactionsEnabled="1"
emitMetadata="0"
inputPosition="bottom"
theme={resolvedTheme === 'dark' ? 'dark' : 'light'}
lang={lang === 'zh' ? 'zh-CN' : 'en'}
loading="lazy"
/>
</div>
)
}3. 修改 src/app/[lang]/[[...mdxPath]]/page.tsx
import { generateStaticParamsFor, importPage } from 'nextra/pages'
import { useMDXComponents } from '@/mdx-components'
import { GiscusComments } from '@/components/GiscusComments'
export const generateStaticParams = generateStaticParamsFor('mdxPath')
export async function generateMetadata(props: PageProps) {
const params = await props.params
const { metadata } = await importPage(params.mdxPath, params.lang)
return metadata
}
type PageProps = Readonly<{
params: Promise<{
mdxPath: string[]
lang: string
}>
}>
const Wrapper = useMDXComponents().wrapper
export default async function Page(props: PageProps) {
const params = await props.params
const result = await importPage(params.mdxPath, params.lang)
const { default: MDXContent, toc, metadata, sourceCode } = result
const isDocsPage = params.mdxPath && params.mdxPath.length > 0
return (
<Wrapper
toc={toc}
metadata={metadata}
sourceCode={sourceCode}
bottomContent={isDocsPage ? <GiscusComments lang={params.lang} /> : undefined}
>
<MDXContent {...props} params={params} />
</Wrapper>
)
}核心要点
- 使用
bottomContent参数:通过 Nextra 的wrapper组件的bottomContent参数将评论渲染在翻页导航下方 - 主题自动切换:利用
next-themes的useTheme实现暗色模式自动切换 - 多语言支持:根据页面语言自动切换评论语言
- 条件渲染:仅在文档页面显示评论,首页不显示
配置获取
访问 https://giscus.app/zh-CN 配置并获取你的:
repo: GitHub 仓库路径repoId: 仓库 IDcategory: 讨论分类categoryId: 分类 ID
最后更新于: