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

React中useEffect出现questions is undefined错误的原因分析

错误原因分析及修复方案

1. 核心错误:questions初始值未定义导致读取异常

你定义questions状态时未设置初始值:

const [questions, setQuestions] = useState<any>();

组件首次渲染时,questions为undefined。第二个useEffect依赖questions,第一次执行时直接访问questions.length,必然抛出questions is undefined错误。

另外,fetch是异步操作,请求返回前questions始终是undefined——网络请求快时,组件重渲染前questions已赋值,错误不会触发;网络慢时就会触发,这就是错误“有时出现”的原因。

2. 额外问题:循环内多次setState的无效操作

你在循环里反复调用setQuestion和setAnswers,每次调用都会触发组件重渲染,且最终只会保留最后一次循环的结果,根本无法展示所有问题。


修复代码

第一步:给状态设置合理初始值

// 给questions设置初始空数组,避免undefined
const [questions, setQuestions] = useState<any[]>([]);
const [question, setQuestion] = useState<string>("")
// 给answers设置初始空数组,匹配数据结构
const [answers, setAnswers] = useState<any[]>([])

第二步:修正useEffect的判断逻辑

useEffect(() => {
  // 先判断questions是数组且有长度,再执行后续逻辑
  if (Array.isArray(questions) && questions.length > 0) {
    // 示例:展示第一个问题(若要展示所有,需改用列表渲染)
    setQuestion(questions[0].question)
    setAnswers(questions[0].answers)
  }
}, [questions])

第三步:展示所有问题的正确渲染方式

如果要展示所有问题及对应答案,不要用单个question和answers状态,直接遍历questions数组渲染:

return (
  <div>
    {questions.map((item) => (
      <div key={item.id}>
        <p>{item.question}</p>
        <ul>
          {item.answers.map((ans) => (
            <li key={ans.id}>{ans.answer}</li>
          ))}
        </ul>
      </div>
    ))}
  </div>
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:12:04