reactjs - 如何根据来自 API 请求的数据生成随机按钮?
问题描述
因此,我正在制作一个测验应用程序,其中的问题和答案是使用axios
.
import React, { useState, useEffect, Component } from 'react';
const axios = require('axios').default;
const PlayQuiz = () => {
// declaring all the state here
const [questionsArray, setQuestionsArray] = useState([]);
// Using effects here
useEffect(() => {
axios({
method: 'get',
url: 'https://opentdb.com/api.php?amount=10',
}).then(res => {setQuestionsArray(Object.values(res.data)[1])})
.catch(err => console.error(err))
}, []);
useEffect(() => {console.log('questions array', questionsArray)}, [questionsArray]);
// Returning html markup here
return (<>
<div className = 'questions-container'>
{questionsArray[0]? <h1>{questionsArray[0].question}</h1> : ''}
</div>
</>)
}
export default PlayQuiz;
这段代码基本上只是从 API 中获取数据并将其存储在questionsArray
. 使用 questionsArray,我将第一个问题打印为标题,正如您从这段代码中看到的那样{questionsArray[0]? <h1>{questionsArray[0].question}</h1> : ''}
。
这就是我的questionsArray
样子。现在我想生成 4 个动态按钮,其中包含其中的答案。现在由于有两个答案值,一个是正确的,另一个是一系列不正确的答案,我无法想到如何以随机方式打印这些按钮,就像正确答案不应该是第一个选项. 我希望它是随机的,即它可以是第一个按钮、第二个按钮、第三个按钮或第四个按钮。我如何实现它?
解决方案
您可以使用临时数组将所有答案存储在一起(正确和错误)并基于此数组进行渲染。您应该使用Math.random()将正确答案放在该数组的随机位置,如下所示:
import React, { useState, useEffect, Component } from "react";
const axios = require("axios").default;
const PlayQuiz = () => {
// declaring all the state here
const [questionsArray, setQuestionsArray] = useState([]);
// Using effects here
useEffect(() => {
axios({
method: "get",
url: "https://opentdb.com/api.php?amount=10"
})
.then((res) => {
setQuestionsArray(Object.values(res.data)[1]);
})
.catch((err) => console.error(err));
}, []);
useEffect(() => {
console.log("questions array", questionsArray);
}, [questionsArray]);
const getAnswers = (q) => {
const temp = [...q.incorrect_answers];
const randomPosition = Math.floor(Math.random() * (temp.length + 1));
temp.splice(randomPosition, 0, q.correct_answer);
return temp;
};
// Returning html markup here
return (
<>
<div className="questions-container">
{questionsArray[0] ? (
<div>
<h1>{questionsArray[0].question}</h1>
{getAnswers(questionsArray[0]).map((a) => {
return <button key={a}>{a}</button>;
})}
</div>
) : (
""
)}
</div>
</>
);
};
export default PlayQuiz;
你可以看到它在这里工作
推荐阅读
- android - android中的视频镜像
- grpc - grpc-java 中的误导性错误消息:io.grpc.StatusRuntimeException: CANCELLED: Failed to read message
- python - 如何使用数据填充我的数据库以进行测试
- python - Pytesseract 白名单组
- node.js - 如何从特定端口读取和写入数据到控制台?
- python - 对字典/json文件中的值进行排序
- java - 在@AfterTest 方法中进行检查的正确策略
- reactjs - NPM 启动时没有 package.json 文件
- c# - Oracle.ManagedDataAccess 是按应用程序还是按服务器池化?
- javascript - ParentNode.replaceChildren 的替代方案