使用 React 构建测验应用程序
在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是文章学习者,那么本文《使用 React 构建测验应用程序》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!
介绍
在本教程中,我们将引导您使用 react 构建一个有趣的交互式测验网站。这个项目是初学者练习在 react 中处理用户输入、管理状态和渲染动态内容的好方法。
项目概况
测验网站允许用户回答多项选择题并获得有关其选择的即时反馈。测验结束时,用户会看到他们的分数以及正确答案。
特征
- 互动测验:用户可以回答问题并查看他们的分数。
- 实时反馈:立即指示所选答案是否正确。
- 分数计算:在整个测验过程中跟踪分数。
- 动态内容:问题和选项从预定义列表中动态呈现。
使用的技术
- react:用于构建用户界面和管理组件状态。
- css:用于设计应用程序的样式。
- javascript:用于处理逻辑和测验功能。
项目结构
该项目的结构如下:
├── public ├── src │ ├── components │ │ ├── quiz.jsx │ │ ├── question.jsx │ ├── app.jsx │ ├── app.css │ ├── index.js │ └── index.css ├── package.json └── readme.md
关键部件
- quiz.jsx:处理测验逻辑和分数计算。
- question.jsx:显示单个问题并处理用户输入。
- app.jsx:管理布局并渲染 quiz 组件。
代码说明
测验组件
测验组件负责呈现问题、计算分数以及处理测验完成。
import { useeffect, usestate } from "react"; import result from "./result"; import question from "./question"; const data = [ { question: "what is the capital of france?", options: ["paris", "berlin", "madrid", "rome"], answer: "paris", }, { question: "what is the capital of germany?", options: ["berlin", "munich", "frankfurt", "hamburg"], answer: "berlin", }, { question: "what is the capital of spain?", options: ["madrid", "barcelona", "seville", "valencia"], answer: "madrid", }, { question: "what is the capital of italy?", options: ["rome", "milan", "naples", "turin"], answer: "rome", }, { question: "what is the capital of the united kingdom?", options: ["london", "manchester", "liverpool", "birmingham"], answer: "london", }, { question: "what is the capital of canada?", options: ["ottawa", "toronto", "vancouver", "montreal"], answer: "ottawa", }, { question: "what is the capital of australia?", options: ["canberra", "sydney", "melbourne", "brisbane"], answer: "canberra", }, { question: "what is the capital of japan?", options: ["tokyo", "osaka", "kyoto", "nagoya"], answer: "tokyo", }, { question: "what is the capital of china?", options: ["beijing", "shanghai", "guangzhou", "shenzhen"], answer: "beijing", }, { question: "what is the capital of russia?", options: ["moscow", "saint petersburg", "novosibirsk", "yekaterinburg"], answer: "moscow", }, { question: "what is the capital of india?", options: ["new delhi", "mumbai", "bangalore", "chennai"], answer: "new delhi", }, { question: "what is the capital of brazil?", options: ["brasilia", "rio de janeiro", "sao paulo", "salvador"], answer: "brasilia", }, { question: "what is the capital of mexico?", options: ["mexico city", "guadalajara", "monterrey", "tijuana"], answer: "mexico city", }, { question: "what is the capital of south africa?", options: ["pretoria", "johannesburg", "cape town", "durban"], answer: "pretoria", }, { question: "what is the capital of egypt?", options: ["cairo", "alexandria", "giza", "luxor"], answer: "cairo", }, { question: "what is the capital of turkey?", options: ["ankara", "istanbul", "izmir", "antalya"], answer: "ankara", }, { question: "what is the capital of argentina?", options: ["buenos aires", "cordoba", "rosario", "mendoza"], answer: "buenos aires", }, { question: "what is the capital of nigeria?", options: ["abuja", "lagos", "kano", "ibadan"], answer: "abuja", }, { question: "what is the capital of saudi arabia?", options: ["riyadh", "jeddah", "mecca", "medina"], answer: "riyadh", }, { question: "what is the capital of indonesia?", options: ["jakarta", "surabaya", "bandung", "medan"], answer: "jakarta", }, { question: "what is the capital of thailand?", options: ["bangkok", "chiang mai", "phuket", "pattaya"], answer: "bangkok", }, { question: "what is the capital of malaysia?", options: ["kuala lumpur", "george town", "johor bahru", "malacca"], answer: "kuala lumpur", }, { question: "what is the capital of the philippines?", options: ["manila", "cebu city", "davao city", "quezon city"], answer: "manila", }, { question: "what is the capital of vietnam?", options: ["hanoi", "ho chi minh city", "da nang", "hai phong"], answer: "hanoi", }, { question: "what is the capital of south korea?", options: ["seoul", "busan", "incheon", "daegu"], answer: "seoul", }, ]; const quiz = () => { const [currentquestion, setcurrentquestion] = usestate(0); const [score, setscore] = usestate(0); const [showresult, setshowresult] = usestate(false); const [timer, settimer] = usestate(30); const [shownextbutton, setshownextbutton] = usestate(true); useeffect(() => { if (timer === 0) { handlenext(); } const timerid = settimeout(() => settimer(timer - 1), 1000); return () => cleartimeout(timerid); }, [timer]); const handleanswer = (selectedoption) => { if (selectedoption === data[currentquestion].answer) { setscore(score + 1); } setshownextbutton(true); // show the next button after answering }; const handlenext = () => { const nextquestion = currentquestion + 1; if (nextquestion < data.length) { setcurrentquestion(nextquestion); } else { setshowresult(true); } setshownextbutton(true); // hide the next button after moving to the next question settimer(30); }; if (showresult) { return; } return ( ); }; export default quiz;question : {currentquestion + 1} / {data.length}time left : {timer} seconds
测验组件管理当前问题索引和分数。它还会跟踪测验何时完成,并在回答所有问题后显示最终分数。
问题成分
问题组件处理每个问题的显示并允许用户选择答案。
const question = ({ question, options, onanswer, onnext, shownextbutton }) => { return (); }; export default question;{question}
{options.map((option, index) => ( ))} {shownextbutton && }
该组件采用 data 属性,其中包括问题及其选项,并动态呈现它。 handleanswer 函数处理所选选项。
应用程序组件
app 组件管理布局并渲染 quiz 组件。
import quiz from "./components/quiz"; import "./app.css"; import logo from "./assets/images/quizlogo.png"; const app = () => { return (); }; export default app;![]()
made with ❤️ by abhishek gurjar
该组件通过页眉和页脚构建页面,测验组件呈现在中心。
结果成分
结果组件负责在用户提交答案后显示他们的测验分数。它通过将用户的回答与正确答案进行比较来计算分数,并提供有关正确回答了多少个问题的反馈。
const result = ({ score, totalquestion }) => { return (); } export default result;quiz complete
your score is {score} out of {totalquestion}
在此组件中,分数和问题总数作为 props 传递。根据分数,该组件向用户显示一条消息,要么表扬他们正确回答所有问题,要么鼓励他们继续练习。这种动态反馈可以帮助用户了解他们的表现。
css 样式
css 确保测验的布局干净简单。它设计测验组件的样式并提供用户友好的视觉效果。
* { box-sizing: border-box; } body { background-color: #cce2c2; color: black; margin: 0; padding: 0; font-family: sans-serif; } .app { width: 100%; display: flex; align-items: center; justify-content: flex-start; flex-direction: column; } .app img { margin: 50px; } /* quiz */ .quiz { display: flex; flex-direction: column; align-items: center; width: 60%; margin: 0 auto; } .countandtime { display: flex; align-items: center; gap: 300px; } .questionnumber { font-size: 20px; background-color: #fec33d; padding: 10px; border-radius: 10px; font-weight: bold; } .timer { font-size: 18px; background-color: #44b845; color: white; padding: 10px; border-radius: 10px; font-weight: bold; } /* question */ .question { margin-top: 20px; } .question h2 { background-color: #eaf0e7; width: 690px; padding: 30px; border-radius: 10px; } .question .option { display: flex; margin-block: 20px; flex-direction: column; align-items: flex-start; background-color: #eaf0e7; padding: 20px; border-radius: 10px; font-size: 18px; width: 690px; } .question .next { font-size: 25px; color: white; background-color: #35bd3a; border: none; padding: 10px; width: 100px; border-radius: 10px; margin-left: 590px; } /* result */ .result { border-radius: 19px; display: flex; align-items: center; justify-content: center; flex-direction: column; width: 500px; height: 300px; margin-top: 140px; background-color: #35bd3a; color: white; } .result h2{ font-size: 40px; } .result p{ font-size: 25px; } .footer { margin: 40px; }
样式确保布局居中,并在测验选项上提供悬停效果,使其更具互动性。
安装与使用
要开始此项目,请克隆存储库并安装依赖项:
git clone https://github.com/abhishekgurjar-in/quiz-website.git cd quiz-website npm install npm start
这将启动开发服务器,并且应用程序将在 http://localhost:3000 上运行。
现场演示
在此处查看测验网站的现场演示。
结论
这个测验网站对于希望提高 react 技能的初学者来说是一个出色的项目。它提供了一种引人入胜的方式来练习管理状态、呈现动态内容和处理用户输入。
制作人员
- 灵感:该项目的灵感来自于经典问答游戏,将乐趣与学习融为一体。
作者
abhishek gurjar 是一位 web 开发人员,热衷于构建交互式且引人入胜的 web 应用程序。您可以在 github 上关注他的工作。
到这里,我们也就讲完了《使用 React 构建测验应用程序》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

- 上一篇
- 解决电脑无法开机的8个有效方法

- 下一篇
- Vue2 中 v-if 和 v-else-if 双条件渲染失败,如何排查问题?
-
- 文章 · 前端 | 8小时前 |
- JavaScript中setTimeout()使用技巧与示例
- 144浏览 收藏
-
- 文章 · 前端 | 8小时前 |
- Vue.js混合详解与实用技巧
- 173浏览 收藏
-
- 文章 · 前端 | 8小时前 |
- WebWorkers在JavaScript中如何应用?
- 378浏览 收藏
-
- 文章 · 前端 | 8小时前 | 正则表达式 includes() indexOf() endswith() startsWith()
- JavaScript字符串匹配测试技巧与方法
- 124浏览 收藏
-
- 文章 · 前端 | 8小时前 | JavaScript 用户体验 Intl.NumberFormat 货币格式化 toFixed
- JavaScript货币格式化实用技巧
- 444浏览 收藏
-
- 文章 · 前端 | 9小时前 |
- Vue.js跨组件通信技巧与实现方法
- 364浏览 收藏
-
- 文章 · 前端 | 9小时前 | 游戏循环
- JavaScript游戏循环的创建方法及技巧
- 341浏览 收藏
-
- 文章 · 前端 | 9小时前 |
- JavaScript中if-else语句的使用攻略
- 238浏览 收藏
-
- 文章 · 前端 | 9小时前 |
- Reflect对象在JavaScript中的妙用及应用技巧
- 181浏览 收藏
-
- 文章 · 前端 | 10小时前 |
- 反序输出字符串算法解析及代码实现
- 232浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- AI Make Song
- AI Make Song是一款革命性的AI音乐生成平台,提供文本和歌词转音乐的双模式输入,支持多语言及商业友好版权体系。无论你是音乐爱好者、内容创作者还是广告从业者,都能在这里实现“用文字创造音乐”的梦想。平台已生成超百万首原创音乐,覆盖全球20个国家,用户满意度高达95%。
- 2次使用
-
- SongGenerator
- 探索SongGenerator.io,零门槛、全免费的AI音乐生成器。无需注册,通过简单文本输入即可生成多风格音乐,适用于内容创作者、音乐爱好者和教育工作者。日均生成量超10万次,全球50国家用户信赖。
- 2次使用
-
- BeArt AI换脸
- 探索BeArt AI换脸工具,免费在线使用,无需下载软件,即可对照片、视频和GIF进行高质量换脸。体验快速、流畅、无水印的换脸效果,适用于娱乐创作、影视制作、广告营销等多种场景。
- 2次使用
-
- 协启动
- SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
- 9次使用
-
- Brev AI
- 探索Brev AI,一个无需注册即可免费使用的AI音乐创作平台,提供多功能工具如音乐生成、去人声、歌词创作等,适用于内容创作、商业配乐和个人创作,满足您的音乐需求。
- 10次使用
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览
-
- UI设计中为何选择绝对定位的智慧之道
- 2024-02-03 501浏览