刷题引擎、自动挖空和练习模式
Quiz App 的核心体验不是导入,而是刷题过程。刷题页需要同时处理题目顺序、用户答案、即时反馈、错题收集、统计结果、断点续刷和手势切换。如果所有逻辑都堆在组件里,后面会很难维护。
引擎模块
文档里把刷题相关逻辑放到 utils/quiz/engine.ts 和 hooks/useQuizSession.ts。前者提供判题、洗牌、过滤、会话生成等纯逻辑;后者负责把这些逻辑接入 React 状态和页面生命周期。
engine.ts -> checkAnswer / shuffle / filter
stats.ts -> 正确率、趋势、薄弱点
useQuizSession -> 当前题、答案、提交、下一题、完成
自动挖空
填空题在导入后会经过自动挖空。触发条件是题型为 fill,且题干里还没有 ____。系统会把答案文本替换为下划线,并支持顿号枚举的多空答案。这样用户不需要手工把每道填空题整理成统一格式。
这里选择规则挖空,而不是完全依赖 AI。原因很实际:纯前端规则可预测、可测试、离线可用;AI 可以作为增强,但不应该成为基础能力的前提。
练习模式
- 标准模式:用户作答后即时判题,最终进入结果页。
- 背题模式:先显示答案,再让用户自评“记住了/没记住”。
- 错题本:答错自动收集,后续可以只刷错题。
- 断点续刷:按题型保存进度,离开后 24 小时内可继续。
交互细节
移动端体验被放在比较重要的位置。左右滑动可以切题,浮动题目导航网格显示当前题、已答题、未答题和云端已答状态。完成页用颜色区分正确率:高于 80%、高于 50%、低于 50% 分别对应不同反馈。
这些细节不复杂,但它们让刷题过程像一个完整应用,而不是一组表单。