React组件状态更新失败 答完10题触发undefined读取报错
问题反馈
- 本次问题涉及的完整代码可在对应CodeSandbox项目中查看。
我目前正在开发记忆游戏《Indefinite Interrogation》的复刻版本,游戏核心规则为:
玩家将持续收到问题,同一道题每次被提问时都必须给出完全相同的答案;题目首次出现时玩家可以任意作答,后续再遇到同一道题,答案必须和第一次的回答完全一致。
异常现象
代码设计的预期逻辑:每答完10道题,questionList(待展示的问题列表)会通过getNextQuestion()函数更新,Game组件会持续加载渲染新的问题。
实际运行时出现以下异常:
- 答对第10道题后页面直接崩溃,抛出错误:Cannot read properties of undefined (reading '10')
- 报错触发位置为代码第512行,排查发现
questionList相关逻辑异常返回了undefined - 状态变量
currentListIndex(即questionList对应的当前读取索引)没有被getNextQuestion()正常更新:函数执行完成后,代码仍然读取currentListIndex的旧值。由于每个questionList固定长度为10、合法索引范围是0-9,currentListIndex会异常增长到10,直接触发越界崩溃 - 另一个状态变量
questionsIndices(本质是索引数组,用于筛选可用的问题list生成新的questionList)同样存在无法被getNextQuestion()正常更新的问题
目前初步猜测问题出在useEffect()的使用方式上,需要定位具体错误原因并给出修复方案。
补充说明
- 调试时可通过控制台输出查看每道题对应的
correctAnswer字段 - 游戏结束后会自动重置积分为0,重置流程耗时可能有数秒
内容的提问来源于stack exchange,提问作者SirIsaacNeutron
相关产品推荐
相关产品推荐

