quiz.tsx
说明
⚠️ 注意:quiz.tsx 文件不存在。Quiz 组件实际定义在 <code>ui.tsx</code> 文件中。
本文档描述 ui.tsx 中导出的 Quiz 组件。
Quiz 组件
交互式测验/问答组件,用于书籍中创建选择题目,帮助读者检验理解程度。
组件
Quiz
选择题测验组件,支持单选、即时反馈和答案解析。
Props:
| 属性 | 类型 | 必填 | 描述 |
|---|---|---|---|
question | string | 是 | 问题文本 |
options | string[] | 是 | 选项数组 |
correctIndex | number | 是 | 正确选项的索引 |
explanation | string | 是 | 答案解析 |
状态管理:
| 状态 | 类型 | 描述 | |
|---|---|---|---|
selected | `number \ | null` | 用户选择的选项索引 |
showExplanation | boolean | 是否显示答案解析 |
交互流程:
- 用户看到问题和选项
- 用户点击某个选项
- 禁用所有选项(防止重复选择)
- 选中的选项高亮显示:
- 正确:绿色背景 + 绿色边框 - 错误:红色背景 + 红色边框
- 正确答案同时高亮显示
- 显示答案解析区域
视觉样式:
- 容器:
p-4 border rounded-lg bg-card - 问题:
font-semibold m-0! mb-4! - 选项按钮:
- 默认:w-full p-3 text-left rounded-lg border transition-colors text-sm hover:bg-muted
- 选中正确:bg-green-100 border-green-500 dark:bg-green-950 dark:border-green-700
- 选中错误:bg-red-100 border-red-500 dark:bg-red-950 dark:border-red-700
- 解析区域:
- 正确:bg-green-50 dark:bg-green-950/50
- 错误:bg-amber-50 dark:bg-amber-950/50
国际化:
使用 book.interactive 命名空间的翻译键:
correct- "正确!" 提示notQuite- "不太对" 提示
使用示例:
import { Quiz } from "@/components/book/elements/ui";
<Quiz
question="什么是温度参数(Temperature)的主要作用?"
options={[
"控制模型的响应速度",
"控制输出的随机性和创造性",
"限制输入文本的长度",
"设置模型的知识截止日期"
]}
correctIndex={1}
explanation="温度参数控制模型输出的随机性。较低的温度(如0.2)产生更确定性的输出,较高的温度(如0.8)产生更多样化和创造性的输出。"
/>
完整示例:
import { Quiz, Callout } from "@/components/book/elements/ui";
export function ChapterQuiz() {
return (
<div className="quiz-section">
<Callout type="tip" title="知识检验">
完成以下测验来检验你对本章内容的理解。
</Callout>
<Quiz
question="以下哪个是编写有效提示词的最佳实践?"
options={[
"使用模糊的语言让模型自由发挥",
"提供具体的上下文和明确的指令",
"尽可能缩短提示词以节省令牌",
"使用复杂的词汇展示专业性"
]}
correctIndex={1}
explanation="有效的提示词应该清晰、具体,并提供足够的上下文。模糊的提示词会导致不一致的输出,而过度的简洁可能遗漏重要信息。"
/>
<Quiz
question="Few-shot 提示的主要目的是什么?"
options={[
"减少 API 调用成本",
"通过示例展示期望的输出格式",
"加快模型响应速度",
"限制模型的知识范围"
]}
correctIndex={1}
explanation="Few-shot 提示通过提供输入-输出示例,帮助模型理解任务的格式和期望,从而提高输出质量。"
/>
</div>
);
}
依赖
| 依赖 | 用途 |
|---|---|
react - useState | 选择状态和解析显示状态 |
next-intl - useTranslations | 国际化翻译 |
@/lib/utils - cn | 类名合并 |
注意事项
- 单选限制 - 当前仅支持单选题,用户选择后不可更改
- 即时反馈 - 选择后立即显示答案和解析
- 多题目 - 在同一页面使用多个 Quiz 组件时,各自独立维护状态
- 无障碍 - 使用
<button>元素,支持键盘导航
与 ui.tsx 的关系
Quiz 组件与以下组件一同定义在 ui.tsx 中:
Collapsible- 可折叠面板Callout- 标注/提示框CopyableCode- 可复制代码块TryIt- 试试点组件NavButton- 导航按钮NavFooter- 导航页脚
如需导入 Quiz 组件:
// 方式1:从 ui.tsx 直接导入
import { Quiz } from "@/components/book/elements/ui";
// 方式2:从 interactive.tsx 导入(推荐)
import { Quiz } from "@/components/book/interactive";