🌐
50 React Coding Puzzles
  • 50 React Coding Puzzles
  • Contact
  • Reviews
  • Table of Contents
  • Introduction
  • 1 - Simple Counter App
  • 2 - Dynamic List of Items with Strikethrough
  • 3 - Color Picker with Hex Code Display
  • 4 - Password Strength Checker
  • 5 - Countdown Timer with Audio
  • 6 - Dynamic Movie List with Filtering and Sorting
  • 7 - Text Animation Component (Fade/Scroll)
  • 8 - Dynamically Generated Text Art
  • 9 - Meme Generator with Custom Text
  • 10 - "What Should I Eat?" Random Recipe Generator
  • 11 - Simple Quiz App with Multiple Choice
  • 12 - Unit Converter
  • 13 - Dynamic Image Gallery with Lightbox
  • 14 - Weather Widget with Temperature and Description
  • 15 - Contact Form with Email and Message Validation
  • 16 - Color Palette Generator
  • 17 - Drag-and-Drop Feature for Rearranging Items
  • 18 - Interactive Quiz with Dynamic Results and Feedback
  • 19 - To-Do List with Task Categorization
  • 20 - Note-Taking App with Markdown Support
  • 21 - Simple Calculator with Basic Operations
  • 22 - Word Scramble Game with Timer and Score
  • 23 - Number Guessing Game
  • 24 - Digital Clock with Time Zone Support
  • 25 - Interactive Time Zone Converter
  • 26 - Weather Forecast App with Location Detection
  • 27 - Real-Time Stock Ticker with Updates
  • 28 - Virtual Dice Roller with Multiple Dice
  • 29 - Responsive Navigation Menu with Dropdowns
  • 30 - Progress Bar for Loading or Task Completion
  • 31 - Modal Window for Alerts and Confirmations
  • 32 - Infinite Scroll for Loading More Content
  • 33 - Form Validation with Error Messages
  • 34 - Search Bar with Filtering and Suggestions
  • 35 - Drag-and-Drop File Upload
  • 36 - Interactive Color Picker with Sliders
  • 37 - Image Carousel with Autoplay
  • 38 - Rating System with Stars or Thumbs Up/Down
  • 39 - Comment Section with Nested Replies
  • 40 - Pagination for Long Lists of Data
  • 41 - Stopwatch app that tracks elapsed time
  • 42 - Responsive E-commerce Product Grid
  • 43 - Random Movie/Book Recommender
  • 44 - Kanban board for managing tasks with drag-and-drop
  • 45 - Chat application with real-time messaging using WebSockets
  • 46 - Calendar that displays events and allows scheduling
  • 47 - Tic-Tac-Toe Game
  • 48 - Hangman Game
  • 49 - Notes App
  • 50 - Expense Tracker
  • Afterword
  • Appendix
Powered by GitBook
On this page
  • Description
  • Algorithm
  • Classes
  • Code
  • Explanation
  • Possible Future Enhancements

18 - Interactive Quiz with Dynamic Results and Feedback

Description

Create a React application that displays an interactive quiz with dynamic results and feedback. The quiz should have multiple questions, and the user should be able to select answers and receive feedback on their responses.

Algorithm

  1. Create a state variable to store the quiz questions and answers.

  2. Define a function to handle the user's answer selection.

  3. Define a function to calculate the quiz results and feedback.

  4. Render the quiz questions and answers.

  5. Render the quiz results and feedback.

Classes

  • QuizQuestion: A component that represents a single quiz question.

  • QuizResults: A component that displays the quiz results and feedback.

Code

QuizQuestion.js

import React from 'react';

function QuizQuestion({ question, answers, onAnswerSelected }) {
  return (
    <div>
      <h2>{question}</h2>
      {answers.map((answer, index) => (
        <div key={index}>
          <input
            type="radio"
            name={question}
            value={answer}
            onClick={() => onAnswerSelected(answer)}
          />
          <span>{answer}</span>
        </div>
      ))}
    </div>
  );
}

export default QuizQuestion;

QuizResults.js

import React from 'react';

function QuizResults({ results, feedback }) {
  return (
    <div>
      <h2>Results</h2>
      <p>Score: {results.score}</p>
      <p>Feedback: {feedback}</p>
    </div>
  );
}

export default QuizResults;

Quiz.js

import React, { useState } from 'react';
import QuizQuestion from './QuizQuestion';
import QuizResults from './QuizResults';

function Quiz() {
  const [questions, setQuestions] = useState([
    {
      question: 'What is the capital of France?',
      answers: ['Paris', 'London', 'Berlin'],
      correctAnswer: 'Paris'
    },
    {
      question: 'What is the largest planet in our solar system?',
      answers: ['Earth', 'Saturn', 'Jupiter'],
      correctAnswer: 'Jupiter'
    }
  ]);
  const [results, setResults] = useState({ score: 0, feedback: '' });
  const [currentQuestion, setCurrentQuestion] = useState(0);

  const handleAnswerSelected = (answer) => {
    const correctAnswer = questions[currentQuestion].correctAnswer;
    if (answer === correctAnswer) {
      setResults((prevResults) => ({ ...prevResults, score: prevResults.score + 1 }));
    } else {
      setResults((prevResults) => ({ ...prevResults, feedback: 'Incorrect' }));
    }
    setCurrentQuestion(currentQuestion + 1);
  };

  return (
    <div>
      {currentQuestion < questions.length ? (
        <QuizQuestion
          question={questions[currentQuestion].question}
          answers={questions[currentQuestion].answers}
          onAnswerSelected={handleAnswerSelected}
        />
      ) : (
        <QuizResults results={results} feedback={results.feedback} />
      )}
    </div>
  );
}

export default Quiz;

Explanation

The Quiz component renders a quiz with multiple questions and answers. The user can select answers, and the component will display the quiz results and feedback. The QuizQuestion component represents a single quiz question, and the QuizResults component displays the quiz results and feedback.

Possible Future Enhancements

  • Add more questions and answers to the quiz.

  • Display the quiz results and feedback in a more visually appealing way.

  • Add a timer to the quiz.

  • Allow the user to retake the quiz.

  • Display the correct answers and explanations for each question.

Previous17 - Drag-and-Drop Feature for Rearranging ItemsNext19 - To-Do List with Task Categorization

Last updated 10 months ago