React JSX实现的计时器点击答题按钮时重置问题如何解决
故障根因
你代码中负责初始化题目列表、计时器的useEffect未指定依赖数组,根据React Hooks规则,无依赖数组的useEffect会在每一次组件重渲染时都执行。
当你点击答案选项时,会更新current、result等状态触发组件重渲染,此时该useEffect会再次执行,重新计算赋值timeLimit,直接导致计时器被重置,问题和fetch请求无关,fetch只在组件挂载时执行一次。
修复方案
- 给第二个useEffect添加依赖数组
[executedFetch, quiz],确保只有在fetch拿到新的quiz数据时才会执行初始化逻辑,不会在每次点击答案重渲染时重复触发计时器赋值 - 可选优化:可以删除冗余的
executedFetch、executedSet状态,直接判断quiz是否有值即可,简化代码逻辑 - 额外注意:你代码中引用的
handleCopy方法未定义,需要补充实现否则会触发运行时报错
修正后的关键代码片段
// 仅在executedFetch或quiz变更时执行初始化逻辑 useEffect(() => { if (executedFetch){ setQuestionList(quiz.questions) setTimeLimit((quiz.timeLimit * 1000) + Date.now()) setStartTime(Date.now()) setExecutedSet(true) } }, [executedFetch, quiz]) // 新增依赖数组
内容的提问来源于stack exchange,提问作者ABpositive
相关产品推荐
相关产品推荐

