React Tailwind css 大前端考試、問卷響應式模板

功能概述

基于 React 和 Tailwind CSS 開發的在線大前端知識考試系統。頁面設計簡潔美觀,交互流暢,適合前端開發者、學習者進行自我測試和知識鞏固。系統內置多道涵蓋 React、CSS、JavaScript、HTTP 等前端核心知識點的題目,支持單選與多選題型,實時統計答題進度與得分,帶來沉浸式的答題體驗。

功能特點

  • 多題型支持:支持單選題與多選題,靈活考察知識點。
  • 實時進度條:頂部進度條動態展示已答題數,激勵用戶完成全部題目。
  • 即時評分反饋:提交后即時顯示得分與答題結果,便于自我評估。
  • 答題狀態保存:每道題的作答狀態實時保存,切換題目不會丟失已選答案。
  • 移動端友好:頁面自適應,移動端與 PC 端均有良好體驗。
  • 美觀 UI:采用 Tailwind CSS,界面現代、簡潔、易用。
  • 底部固定提交按鈕:方便用戶隨時提交答卷,提升交互效率。

技術亮點

  • React Hooks:全程使用useState等 React Hooks 進行狀態管理,代碼簡潔高效。
  • 函數式編程:采用函數式思維處理答題邏輯,易于維護和擴展。
  • Tailwind CSS:利用 Tailwind CSS 實現響應式布局和現代化 UI,無需自定義大量樣式。
  • 組件化設計:題目渲染、進度條、彈窗等均為獨立組件,結構清晰,便于復用。
  • 無后端依賴:純前端實現,開箱即用,適合快速集成到各類前端項目或教學場景。

使用場景

  • 前端面試準備:幫助求職者自測前端基礎知識,查漏補缺。
  • 在線課程配套:作為前端課程的隨堂測驗或課后練習工具。
  • 企業內訓考核:企業可用于員工前端技能評測與培訓。
  • 技術社區活動:技術沙龍、社區活動中的知識競賽環節。
  • 自我提升:前端開發者日常自測、鞏固知識點。

完整源碼

import React, { useState } from "react";const questions = [{type: "single",question: "React中用于管理組件內部狀態的鉤子是?",options: ["useEffect", "useState", "useRef", "useMemo"],answer: [1],},{type: "multi",question: "以下哪些屬于前端構建工具?",options: ["Webpack", "Babel", "Nginx", "Vite"],answer: [0, 1, 3],},{type: "single",question: "CSS中用于設置元素外邊距的屬性是?",options: ["padding", "margin", "border", "outline"],answer: [1],},{type: "single",question: "Vue3中響應式數據的核心API是?",options: ["reactive", "computed", "watch", "ref"],answer: [0],},{type: "multi",question: "以下哪些是HTTP請求方法?",options: ["GET", "POST", "FETCH", "PUT"],answer: [0, 1, 3],},{type: "single",question: "在HTML5中用于繪制圖形的標簽是?",options: ["<svg>", "<canvas>", "<img>", "<picture>"],answer: [1],},{type: "multi",question: "以下哪些屬于JavaScript原始類型?",options: ["String", "Object", "Number", "Boolean"],answer: [0, 2, 3],},{type: "single",question: "下列哪個不是CSS預處理器?",options: ["Sass", "Less", "Stylus", "PostCSS"],answer: [3],},{type: "multi",question: "以下哪些屬于前端路由實現方式?",options: ["Hash路由", "History路由", "Memory路由", "File路由"],answer: [0, 1, 2],},{type: "single",question: "在Node.js中用于引入模塊的關鍵字是?",options: ["import", "require", "include", "export"],answer: [1],},
];export default function Survey() {const [userAnswers, setUserAnswers] = useState(Array(questions.length).fill([]));const [submitted, setSubmitted] = useState(false);const [score, setScore] = useState(0);// 計算已答題數const answeredCount = userAnswers.filter((a) => a.length > 0).length;const handleChange = (qIdx, optIdx, type) => {setUserAnswers((prev) => {const newAnswers = [...prev];if (type === "single") {newAnswers[qIdx] = [optIdx];} else {if (newAnswers[qIdx].includes(optIdx)) {newAnswers[qIdx] = newAnswers[qIdx].filter((i) => i !== optIdx);} else {newAnswers[qIdx] = [...newAnswers[qIdx], optIdx];}}return newAnswers;});};const handleSubmit = (e) => {e.preventDefault();let total = 0;questions.forEach((q, idx) => {const user = userAnswers[idx].sort().join(",");const right = q.answer.sort().join(",");if (user === right) total++;});setScore(total);setSubmitted(true);setTimeout(() => setSubmitted(false), 3000);};return (<div className="max-w-2xl mx-auto p-4 pb-24 relative min-h-screen">{/* 進度條 */}<div className="w-full pb-4 sticky top-0 z-20 bg-white px-2 sm:px-4"><div className="flex items-center mb-1"><span className="text-sm text-gray-600">進度:</span><span className="ml-2 text-sm font-bold text-blue-600">{answeredCount} / {questions.length}</span></div><div className="w-full h-2 bg-gray-200 rounded overflow-hidden"><divclassName="h-2 bg-blue-500 rounded transition-all duration-300"style={{ width: `${(answeredCount / questions.length) * 100}%` }}></div></div></div><h1 className="text-2xl font-bold mb-4">大前端知識考試</h1><form onSubmit={handleSubmit}>{questions.map((q, qIdx) => (<div key={qIdx} className="mb-6 p-4 border rounded"><div className="mb-2 font-medium">{qIdx + 1}. {q.question}{q.type === "multi" && (<span className="ml-2 text-xs text-blue-500">(多選)</span>)}</div><div>{q.options.map((opt, optIdx) => (<label key={optIdx} className="block cursor-pointer mb-1"><inputtype={q.type === "single" ? "radio" : "checkbox"}name={`q${qIdx}`}value={optIdx}checked={userAnswers[qIdx].includes(optIdx)}onChange={() => handleChange(qIdx, optIdx, q.type)}className="mr-2"/>{opt}</label>))}</div></div>))}{/* 固定底部提交按鈕 */}<div className="fixed left-0 right-0 bottom-0 z-30 bg-white border-t shadow-lg p-4 flex justify-center"><buttontype="submit"className="bg-blue-600 text-white w-full px-8 py-3 rounded-lg text-lg font-bold shadow hover:bg-blue-700 transition disabled:bg-gray-400 disabled:cursor-not-allowed"disabled={answeredCount !== questions.length}>提交</button></div></form>{submitted && (<div className="fixed inset-0 flex items-center justify-center bg-black bg-opacity-40 z-50"><div className="bg-white p-8 rounded shadow text-center"><div className="text-xl font-bold mb-2">考試得分</div><div className="text-3xl text-blue-600 mb-4">{score} / {questions.length}</div><div>答題結果已記錄!</div></div></div>)}</div>);
}

React Tailwind css 大前端考試、問卷響應式模板 - 高質量源碼分享平臺-免費下載各類網站源碼與模板及前沿動態資訊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88056.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88056.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88056.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端】手寫代碼匯總

近期更新完&#xff0c;后面不定期更新&#xff0c;建議關注收藏點贊。 目錄快排手寫防抖節流數組扁平化&#xff08;要求使用 reduce 方法&#xff09;數組filter實現手寫一個加載圖片的函數 loadImage手寫Promise then手寫 Promise.All手寫 Promise.race手寫allsettled手寫us…

基于MATLAB 的心電信號去噪

基于Matlab的心電信號去噪 generate.m , 3450 genR.m , 953 genU.m , 891 get_obs.m , 957 CHANGELOG , 11185 find_localobs.m , 2312 fmain.m , 2272

git branch -a 還有一些已經刪除了的分支

如何處理已經刪除的遠程跟蹤分支1、刪除遠程跟蹤分支如果你確定某個遠程跟蹤分支不再需要&#xff0c;你可以使用 git branch -d -r 命令來刪除它。例如&#xff0c;要刪除名為 origin/test 的遠程跟蹤分支&#xff0c;你可以使用&#xff1a;git branch -d -r origin/test2、更…

軟件反調試(4)- 基于IsDebuggerPresent的檢測

反調原理 該檢測方式使用 IsDebuggerPresent 或者 CheckRemoteDebuggerPresent 函數&#xff0c;這兩個函數都是 kernel32.dll 中實現的 對于 IsDebuggerPresent 函數&#xff0c;如果返回值為 TRUE&#xff0c;那么表示當前進程在調試器上下文中運行 CheckRemoteDebuggerPrese…

翻譯《The Old New Thing》- Windows 媒體目錄中 onestop.mid 文件的故事

Whats the story of the onestop.mid file in the Media directory? - The Old New Thinghttps://devblogs.microsoft.com/oldnewthing/20130212-00/?p5263 如果你查看你的C:\Windows\Media文件夾&#xff0c;會發現一個名為onestop的MIDI文件。這個奇怪的小MIDI文件背后有什…

【方案】前端UI布局的絕技,響應式布局,多端適配

大家好&#xff0c;歡迎來到停止重構的頻道。本期討論網頁UI布局。網頁UI布局是前端開發中占比較多的部分&#xff0c;做完網頁布局也就差不多完成了一半的工作。本期視頻&#xff0c;我們不再討論基礎的UI布局。我們希望滿足響應式布局&#xff0c;一份代碼適配PC/平板/手機等…

【鄭大二年級信安小學期】Day4上午:Bool盲注時間盲注堆疊查詢post注入HTTP頭部注入ua字段

目錄 0 錄制文件 1 SQL注入-布爾盲注 1.1 布爾盲注優缺點 1.2 先看一下第八關嗯頁面特征 1.3 步驟 1.4 常用函數 1.5 判斷是否字符型 1.6 判斷閉合 1.7 查詢庫名 1.8 查詢數據表 1.9 獲取字段名 1.10 獲取數據 1.11 布爾盲注缺陷 2 時間盲注 2.1 基礎知識 2.2 判…

如何設計一個“真正可復用”的前端組件?

&#x1f9f1; 如何設計一個“真正可復用”的前端組件&#xff1f;&#x1f527; 一個按鈕可以寫10次&#xff0c;也可以封裝一次復用全場&#xff1b;組件是前端的積木&#xff0c;而設計模式才是組裝它們的說明書。你真的在寫“可復用”組件嗎&#xff1f;&#x1f9e0; 什么…

AlpineLinux安裝RabbitMQ及其管理界面

AlpineLinux安裝RabbitMQ及其管理界面 本文以 alpine linux 的 3.21版本為例,演示對于 RabbitMQ 在Linux 下的安裝,其他發行版本大同小異。主要是包管理軟件的命令區別,以及在線倉庫提供的 RabbitMQ 版本差異而已。 (一)安裝 Erlang 因為 RabbitMQ 是用 Erlang 語言編寫…

3S技術+ArcGIS/ENVI全流程實戰:水文、氣象、災害、生態、環境及衛生等領域應用

系統梳理3S技術的核心理論與實戰應用&#xff0c;涵蓋ArcGIS與ENVI軟件操作、空間數據管理、地圖投影轉換、遙感影像解譯、DEM地形分析、空間插值建模等關鍵技能&#xff0c;并結合農業、氣象、生態、災害等跨學科案例&#xff0c;提供從數據獲取到高級可視化的完整解決方案。無…

彈窗中el+table,二次打開彈窗,選擇列會攜帶第一次選擇的數據

1第一次打開彈窗選擇的數據&#xff0c;正確&#xff0c;然后關閉彈窗再次打開彈窗&#xff0c;重新選擇&#xff0c;第二次的數據&#xff0c;錯誤在打開彈窗/關閉彈窗等位置全部做了置空處理&#xff0c;以下是代碼&#xff1a;最后的原因是&#xff1a;el-dailog 自帶緩存&a…

RocketMQ在Spring Boot中的詳細使用指南

?? 目錄 ?? RocketMQ簡介 什么是RocketMQ? 核心概念 ??? 基礎架構組件 ?? 重要概念解釋 ?? 環境搭建 1. RocketMQ服務端安裝 Docker方式(推薦初學者) 手動安裝方式 2. 驗證安裝 ??? Spring Boot集成配置 1. 添加依賴 2. 配置文件 application.y…

基于Java+Springboot的醫院檔案管理系統

源碼編號&#xff1a;S597源碼名稱&#xff1a;基于Springboot的醫院檔案管理系統用戶類型&#xff1a;多角色&#xff0c;用戶、醫護人員、管理員數據庫表數量&#xff1a;11 張表主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven運行環境&#xff1a;Windows/M…

Pandas 學習教程

目錄 定義 基本操作 一維數組操作 二維數組操作 數據選擇過濾 數據處理 數據清洗 數據轉換 數據分析 排序 分組聚合 數據透視表 高級操作 合并數據 時間序列處理 自定義函數調用 數據可視化集成 數據導出和導入 大數據分塊處理 定義 全稱&#xff1a; panel da…

QueryWrapper 類的作用與示例詳解

通俗易懂的解釋想象一下你去圖書館找書&#xff1a;QueryWrapper 就像是一個智能的圖書管理員你告訴管理員你的需求&#xff1a;"我要找計算機類、2020年后出版的、作者是張三的書"管理員會根據你的要求組合查詢條件&#xff0c;然后去書庫幫你找書在編程中&#xff…

【PyTorch】PyTorch中torch.nn模塊的循環層

PyTorch深度學習總結 第九章 PyTorch中torch.nn模塊的循環層 文章目錄PyTorch深度學習總結前言一、循環層1. 簡單循環層&#xff08;RNN&#xff09;2. 長短期記憶網絡&#xff08;LSTM&#xff09;3. 門控循環單元&#xff08;GRU&#xff09;4. 雙向循環層二、循環層參數1. …

Ubuntu 24.04 LTS 服務器配置:安裝 JDK、Nginx、Redis。

Ubuntu 24.04 LTS 服務器配置&#xff1a;安裝 JDK、Nginx、Redis。新建用來放置軟件安裝包的目錄 mkdir /home/software 配置目錄所有者為 ubuntu 用戶&#xff1a; chown ubuntu /home/software將軟件安裝包上傳到 /home/software配置 JDK-8 新建 jdk 安裝目錄 mkdir /usr/ja…

工作中用到過哪些設計模式?是怎么實現的?

1. 單例模式&#xff08;結合 Spring Component&#xff09;場景&#xff1a;配置中心、全局狀態管理 Spring 實現&#xff1a;java// 自動注冊為Spring Bean&#xff08;默認單例&#xff09; Component public class AppConfig {Value("${server.port}")private in…

Leetcode 3609. Minimum Moves to Reach Target in Grid

Leetcode 3609. Minimum Moves to Reach Target in Grid 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3609. Minimum Moves to Reach Target in Grid 1. 解題思路 這一題我一開始走岔了&#xff0c;走了一個正向遍歷走法的思路&#xff0c;無論怎么剪枝都一直超時。后來看了…

工作流引擎:IDEA沒有actiBPMN插件怎么辦?

文章目錄一、問題描述二、替代方案一、問題描述 我們在學習activiti7工作流引擎的時候&#xff0c;需要設計流程圖。 一般推薦的就是使用IDEA插件actiBPMN進行開發。 但是&#xff0c;這個插件在IDEA2019后的版本都不在支持。 也就是搜不到 那么&#xff0c;怎么辦了&#x…