React
使用预构建的 React 组件将 Docs Embed 添加到你的 React 应用中
对于 React 项目,GitBook 提供了预构建组件,使嵌入文档变得简单且符合惯用方式。这些组件会自动处理状态管理、上下文和生命周期。
步骤
将包安装
添加 @gitbook/embed 到你的 React 项目中:
npm install @gitbook/embed如需完整的 API 参考和源代码,请参阅 GitHub 上的 @gitbook/embed 包.
添加 GitBookFrame 组件
将 frame 组件放在你希望嵌入内容出现的位置:
function App() {
return (
<GitBookProvider siteURL="https://docs.company.com">
<div className="app">
<YourAppContent />
<GitBookFrame
visitor={{
token: 'your-jwt-token', // 可选:用于自适应内容或已认证访问
unsignedClaims: { userId: '123' } // 可选:用于动态表达式的自定义声明
}}
/>
</div>
</GitBookProvider>
);
}自定义嵌入
将配置属性传递给 frame 组件:
<GitBookProvider siteURL="https://docs.company.com">
<GitBookFrame
trademark={false}
tabs={['assistant', 'docs']}
greeting={{ title: 'Welcome!', subtitle: 'How can I help?' }}
suggestions={['What is GitBook?', 'How do I get started?']}
actions={[
{
icon: 'circle-question',
label: '联系支持',
onClick: () => window.open('https://support.example.com', '_blank')
}
]}
tools={[/* ... */]}
visitor={{
token: 'your-jwt-token',
unsignedClaims: { userId: '123' }
}}
/>
</GitBookProvider>使用 useGitBook 钩子控制嵌入
使用 useGitBook 钩子以编程方式与嵌入交互:
import { useGitBook } from "@gitbook/embed/react";
function HelpButton() {
const gitbook = useGitBook();
const frameURL = gitbook.getFrameURL({ visitor: { token: '...' } });
const handleNavigate = () => {
const iframe = document.createElement('iframe');
iframe.src = frameURL;
const frame = gitbook.createFrame(iframe);
frame.navigateToPage('/getting-started');
frame.navigateToAssistant();
frame.postUserMessage('How do I get started?');
};
return <button onClick={handleNavigate}>获取帮助</button>;
}与 Next.js 或服务端渲染一起使用
动态导入组件以避免 SSR 问题:
import dynamic from "next/dynamic";
const GitBookProvider = dynamic(
() => import("@gitbook/embed/react").then((mod) => mod.GitBookProvider),
{ ssr: false }
);
const GitBookFrame = dynamic(
() => import("@gitbook/embed/react").then((mod) => mod.GitBookFrame),
{ ssr: false }
);属性与配置
GitBookProvider 属性:
siteURL
字符串
是
不适用
你的 GitBook 文档站点 URL(例如, https://docs.company.com).
children
ReactNode
是
不适用
在 provider 内渲染的子组件。
GitBookFrame 属性:
所有配置选项都可以作为属性传递给 <GitBookFrame>。可用选项请参见下方的配置部分。
className
字符串
否
null
要应用到 frame 容器上的 CSS 类名。
style
object
否
{}
要应用到 frame 容器上的行内样式。
visitor
object
否
{}
已认证访问选项(见下文)。
useGitBook 钩子:
返回一个 GitBookClient 实例,包含以下方法:
getFrameURL(options?: { visitor?: {...} })→字符串- 获取 iframe URLcreateFrame(iframe: HTMLIFrameElement)→GitBookFrameClient- 创建 frame 客户端
frame 客户端提供:
navigateToPage(path: string)→voidnavigateToAssistant()→voidpostUserMessage(message: string)→voidclearChat()→voidconfigure(settings: {...})→voidon(event: string, listener: Function)→() => void
配置选项
配置选项可作为 <GitBookFrame>:
tabs
tabs覆盖显示哪些标签页。默认为你站点的配置。
输入:
('assistant' | 'docs')[]
actions
actions显示在侧边栏中、与标签页并列的自定义操作按钮。每个操作按钮在点击时都会触发回调。
注意:这之前名为 buttons。使用 actions 。
输入:
Array<{ icon: string, label: string, onClick: () => void }>
greeting
greeting显示在 Assistant 标签页中的欢迎消息。
输入:
{ title: string, subtitle: string }
suggestions
suggestions显示在 Assistant 欢迎界面中的建议问题。
输入:
string[]
trademark
trademark在嵌入 UI 中显示或隐藏 GitBook 商标——包括 Docs Embed 页脚和 Assistant 品牌标识。
输入:
boolean默认:
true
tools
tools用于扩展 Assistant 的自定义 AI 工具。详情请参见 创建自定义工具 。
输入:
Array<{ name: string, description: string, inputSchema: object, execute: Function, confirmation?: {...} }>
visitor (已认证访问)
visitor (已认证访问)输入:
{ token?: string, unsignedClaims?: Record<string, unknown> }
常见问题
未使用 GitBookProvider 包裹 –
GitBookFrame需要一个父级GitBookProvider才能运行。在没有动态导入的情况下使用 SSR – 该组件使用浏览器 API,在 Next.js 或其他 SSR 框架中必须动态导入。
siteURL 与已发布文档不匹配 – 请确保
siteURL属性与你线上文档站点的 URL 完全一致。在 provider 外调用 useGitBook –
useGitBook钩子必须在一个组件内部使用,该组件是GitBookProvider.树中存在多个 provider – 避免嵌套多个
GitBookProvider实例,否则可能导致上下文冲突。使用旧的组件名称 – 该组件现在是
GitBookFrame,而不是GitBookAssistantFrame.
最后更新于
这有帮助吗?