周三下午,我打开了一个四年没碰的GitHub仓库。这个React答题应用当年写了一半就扔了,现在连加载页都过不去。浏览器控制台里躺着两行错误:429 Too Many Requests,还有一个经典的Cannot read properties of undefined。API在每次渲染时疯狂请求,加载动画永远转下去——典型的自学新手代码,JavaScript基础没打牢就急着上手框架。
这就是GitHub Finish-Up-A-Thon挑战赛的起点:把一个废弃项目真正做完。
第一步:止血
问题比表面看起来更糟。OpenTDB API的429错误说明请求频率超限,而代码里完全没有错误处理,失败响应直接送进.map(),整个应用炸掉。我在api.ts里做了三件事:给响应加response.ok检查,用Array.isArray()守护data.results,再把startTrivia包进try/catch/finally——无论API成败,加载状态必须复位。就这一处改动,那个无限旋转的spinner终于停了。
GitHub Copilot在这里帮了忙。它建议的Array.isArray检查,恰好堵住了我漏掉的静默崩溃点。我没盲从,但重构数据流时确实快了不少。
第二步:让它像个真正的游戏
旧版本的问题不只是bug。它开始得突然,结束得潦草,没有反馈,没有节奏。我加了难度选择(简单/中等/困难),做了带分数的结果页,明确标记"测验结束"的状态,还塞了一些交互音效——让点击有回应,让等待有预期。
UI也换了。原来的界面能用,但和"答题游戏"这个概念气质不符。现在用深色底、高对比度的 trivia 风格,卡片做了毛玻璃效果,内容能跳出来。
现状
线上版本:https://tryquizzify.vercel.app/ 仓库:https://github.com/temisan0x/quiz-app
它不完美。但四年前那个跑不起来的半成品,现在是个能玩、能走完流程、知道用户在哪一步的东西。Finish-Up-A-Thon的核心就是这个:完成比完美重要,尤其是对你自己 abandoned 的项目。
热门跟贴