You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何修改fetch请求获取到的数据?

在React中修改Fetch请求返回的数据的正确方法

你的代码未生效主要有三个核心问题:

  • OpenTDB的API返回的是包含results字段的对象,而非直接的数组,直接对data调用map会报错
  • 处理完数据后未将其存入React的state,导致页面无法获取到修改后的数据
  • 仅给选项添加了isSelected布尔值,未按要求添加ID字段

正确实现步骤

首先定义state存储处理后的题目数据:

const [questions, setQuestions] = useState([]);

然后修改useEffect中的请求逻辑:

useEffect(() => {
  fetch("https://opentdb.com/api.php?amount=5&category=10&difficulty=easy&type=multiple")
    .then((res) => res.json())
    // 取出API返回的真正题目数组results
    .then((data) => data.results.map((question, qIndex) => ({
      ...question,
      // 给每个题目添加唯一ID,可复用API返回的question_id或自定义
      id: question.question_id || `question-${qIndex}`,
      // 处理错误选项,添加ID和isSelected字段
      incorrect_answers: question.incorrect_answers.map((answer, aIndex) => ({
        id: `answer-${qIndex}-${aIndex}`,
        content: answer,
        isSelected: false
      })),
      // 给正确选项也统一格式,方便后续统一处理
      correct_answer: {
        id: `answer-${qIndex}-correct`,
        content: question.correct_answer,
        isSelected: false
      }
    })))
    // 将处理完成的数据存入state
    .then(processedData => setQuestions(processedData))
    // 捕获请求异常
    .catch(err => console.error("请求失败:", err));
}, []);

关键说明

  • 必须从data.results中获取题目数组,这是API返回结构的要求
  • 给每个选项生成唯一ID时,可通过题目索引+选项索引的组合保证唯一性,也可直接使用API返回的question_id拼接
  • 最后一定要调用setQuestions将处理后的数据存入state,这样组件才能感知到数据变化并触发更新

内容的提问来源于stack exchange,提问作者Smith82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:45:34