我正在创建一个Reaction测验应用程序,但我正在试图弄清楚如何将我的答案数组显示为列表。到目前为止,这是我的代码
Load Data成功地从API加载数据,当我在Answers变量上执行控制台日志时,我可以看到每个问题都有一个数组,其中有四个答案,这是正确的。
const loadData = async () => {
let response = await fetch(
"https://opentdb.com/api.php?amount=10&category=22&difficulty=medium&type=multiple"
);
const data = await response?.json();
console.log(data);
const getQuestions = data.results.map((item) => {
const question = item.question;
const answers = [...item.incorrect_answers, item.correct_answer];
//console.log(answers) shows this as an example
["Quebec", "Ontario", "Nova Scotia", "Alberta"]
return {
question: question,
answers: answers,
};
});
return getQuestions;
};
function App() {
//create useState hook to pass data into
const [showData, setData] = useState([]);
//pass the data into a useeffect hook and setData to the loadData method from above
useEffect(() => {
(async () => {
const getData = await loadData();
setData(getData);
})();
}, []);
return (
<React.Fragment>
{showData.map((data) => (
<>
<div>
<h1>{data.question}</h1>
<ul>{data.answers}</ul>
</div>
</>
))}
</React.Fragment>
);
}
Return函数输出问题,但如果我尝试将答案显示为列表,以便可以分别获得每个答案,它只会将它们放在同一行上。
瑞士的首都是哪个城市?苏黎世,法兰克福,维也纳,伯尔尼
如有任何帮助,我们将不胜感激:)
4条答案
按热度按时间5lhxktic1#
您应该迭代答案数组,而不是直接呈现它们。另外,ul是无序列表的父标签,您应该使用li来列出子列表。
这里的校验码:https://codesandbox.io/s/floral-leftpad-zcwew?file=/src/App.js:0-1063
jtoj6r0c2#
您可以使用另一个
map
迭代您的answers
数组:mkshixfv3#
体验🙋🏻♂️
px9o7tmv4#
这里有多个问题:
1.
<ul>{data.answers}</ul>
不起作用,因为data.answers
是数组。您需要将此数组的元素Map到<li>
元素,就像在父数组中所做的那样。1.每当使用
map
创建列表时,必须在每个元素上添加唯一的键,通常是一个id。我假设问题和答案是唯一的,所以您可以使用数据本身作为关键。1.您的代码在访问
response.json()
之前不检查response.ok
。是的,您在这里确实使用了问号操作符,以便特定操作是安全的,但随后下一行上的undefined.results
崩溃,因此它只会推低错误并进一步混淆fetch
错误。1.去掉多余的片段
<>
。1.在ES6中,
{questions: questions}
只能是{questions}
。1.当你继续使用这款应用时,不要忘记打乱你的答案。