开发者问题收集

无法读取未定义的属性“question”

2021-05-16
79

我在 console.log 中获取数据,但是每当我在步骤中描述 getQuestion[0].question 时,它都显示未定义。我在这里做错了什么,请帮助我,提前谢谢了

function App() {
 const [getQuestion, setQuestion] = useState([]);

useEffect(() => {
  axios
  .get('************')
  .then(function (response) {
   const questionsList = response.data.question
   setQuestion(questionsList)
});
},[])
console.log(getQuestion)

 const steps = [
{
  id: '1',
  message: getQuestion[0].question
  trigger: '2',
},
{
  id: '2',
  message: getQuestion[1].question
  trigger: '3',
}]
}

console.log(getQuestion) 显示这些:

在此处输入图像描述

2个回答

这是因为您的初始状态是 []。您的步骤分配在 API 调用完成之前执行,因此访问空数组的元素将返回未定义。

您的 console.log 语句可能也会在您收到异常之前记录“[]”。

Vlad L
2021-05-16

我认为这是关于了解 React 中同步和异步发生的所有事情之间的区别。

useEffect 可能在执行 steps 之前运行,但您的 setQuestion 本质上是一个异步函数。因此,当您定义 steps 时,您的 getQuestion[] 。因此,当您执行 getQuestion[i] 时,其中 i = 01 ,它会中断。

我认为您只需进行少量更改即可实现 steps 的相同结构。

const steps = getQuestion.map(({ question }, index) => ({
  id: index + 1,
  message: question,
  trigger: index + 2
}));
jaybhatt
2021-05-16