首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >quiz.map是不可迭代的- React

quiz.map是不可迭代的- React
EN

Stack Overflow用户
提问于 2022-02-18 12:40:55
回答 2查看 31关注 0票数 0

我正在做一个自我项目-一个小测验应用程序。

它从一个api中获取随机字符串,该api生成一个由5个问题组成的随机对象,包括正确答案和错误答案等。

代码语言:javascript
复制
function App() {
  const [quiz, setQuiz] = React.useState({});
  const [resetGame, setNewGame] = React.useState(false);
  const [showStartMenu, setStartMenu] = React.useState(true);

  const toggleMenu = () => {
    setStartMenu(!showStartMenu)
  }

  function getQuizDetails(){
  fetch(`https://opentdb.com/api.php?amount=5&category=9`)
    .then(res => res.json())
    .then(data => setQuiz(data["results"]))
  }

  React.useEffect(() => {
    getQuizDetails();
  }, [resetGame])

  //const quizJson = JSON.stringify(quiz, null, 0);
  const questions = quiz.map(x => x);



  return (
    <main>

      {!showStartMenu && <button onClick={toggleMenu}>Main Menu (For debug purposes only) </button>}
      {showStartMenu && <Start toggleMenu={toggleMenu} />}
      {!showStartMenu && <pre>{JSON.stringify(questions, null, 2)}</pre>}

    </main>
  );
}

export default App;

但出于某种原因,当我试图映射对象时,它不起作用,而是返回一个错误

代码语言:javascript
复制
 Uncaught TypeError: quiz.map is not a function
    at App (App.jsx:26:26)

有办法解决这个问题吗?我想要帮助,而不是指向某些文章或类似的som1。

注意:-当我没有映射或做任何事情而只是将refer映射到quiz状态时,它就能正常工作。但是我需要找到一种方法来访问这些东西,比如问题,答案等等,所以是的。

如果您需要查看完整的源代码,以下是repl.it链接。问答应用程序- Replit

我匆匆忙忙地打了这个字,所以请随便问一下我应该详细说明什么。

我发现了一些有趣的东西

当我这么做

代码语言:javascript
复制
  const questions = quiz.map(x => x);

地图看起来很管用。

然而,当我尝试

代码语言:javascript
复制
  const questions = quiz.map(x => {
    return <Quiz questions={x["question"]} />
  });

它返回错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-18 12:43:10

.map()用于数组。但是quiz不是数组,它是一个空对象:

代码语言:javascript
复制
const [quiz, setQuiz] = React.useState({});

稍后,您可以在获取数据后将其设置为数组。但它的初始状态是一个对象。如果您希望该状态成为数组,则将其设置为数组:

代码语言:javascript
复制
const [quiz, setQuiz] = React.useState([]);
票数 2
EN

Stack Overflow用户

发布于 2022-02-18 12:42:23

因为您将测试初始状态设置为Object{},而将其设置为Array[]

从…

代码语言:javascript
复制
const [quiz, setQuiz] = React.useState({});

代码语言:javascript
复制
const [quiz, setQuiz] = React.useState([]);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71173654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档