Thursday, October 16, 2025
HomeLanguagesJavascriptHow to build a Quiz App with React and TypeScript ?

How to build a Quiz App with React and TypeScript ?

TypeScript is an open-source programming language, developed and maintained by Microsoft. It is a strongly typed language that builds on javascript. It is usually used in large-scale projects. It follows javascript syntax and adds more features to it.

ReactJS is an open-source Javascript library specially used to design UI(user interfaces) majorly single-page applications. Having a large developer community it is widely used for making single-page applications.

A simple Quiz App that contains a set of curated questions and their answers and checks for the correctness of the answer given by the user. It navigates through the questions using dynamic programming. A quiz can be used as a method of assessment in education and other similar fields to measure knowledge or skills.

In this article, we will learn how to build a quiz app using ReactJS and Typescript.

Modules required:

  • npm
  • React
  • React Bootstrap
  • Typescript

Basic Setup: 

Step 1: Run the following commands to create a new React project using the create-react-app package:

npx create-react-app quiz-app --template typescript

Step 2: Change the directory to the project root directory:

cd quiz-app

Step 3: Change directory to src:

cd src

Step 4: Delete everything inside the directory

rm *

Step 5: Now will create a components directory in the src folder and Question.tsx and Quiz.tsx files in it.

mkdir components && cd components && touch Question.tsx
touch Quiz.tsx

Step 6: Now we will go to the src directory using these commands:

cd ..

Step 7: The src directory will create an index.tsx, App.tsx, and index.css using the following commands:

touch index.tsx && touch index.css && touch App.tsx

Project Structure: The project structure will be as follows:

 

Start the server using the following command:

npm start

Example 1:

  • src/index.tsx file:

Javascript




import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
  
const root = ReactDOM.createRoot(
    document.getElementById('root') as HTMLElement
);
root.render(
    <React.StrictMode>
        <App />
    </React.StrictMode>
);


  • src/components/Question.tsx: This component will be responsible for displaying each question.

Javascript




import React from 'react';
  
interface Props {
    question: string;
    choices: string[];
    answer: string;
    onAnswer: (answer: string) => void;
}
  
const Question: React.FC<Props> = (
    { question, choices, answer, onAnswer }) => {
    return (
        <div className="d-flex 
                        justify-content-center 
                        align-center 
                        text-center 
                        flex-column">
            <h2 className="">{question}</h2>
            <div className="">
                {choices.map((choice) => (
                    <button className="btn btn-success m-2" 
                        onClick={() => onAnswer(choice)}>
                                        {choice}</button>
                ))}
            </div>
        </div>
    );
};
  
export default Question;


  • src/components/Quiz.tsx: This file will be the component responsible for managing the quiz and displaying the questions.

Javascript




import React, { useState } from 'react';
import Question from './Question';
  
const questions = [
    {
        question: 'What is the capital of France?',
        choices: ['Paris', 'London', 'New York'],
        answer: 'Paris',
    },
    {
        question: 'What is the largest planet in our solar system?',
        choices: ['Mars', 'Jupiter', 'Venus'],
        answer: 'Jupiter',
    },
    {
        question: 'What is the boiling point of water?',
        choices: ['100°C', '0°C', '50°C'],
        answer: '100°C',
    },
    {
        question: 'What is the largest planet in our solar system?',
        choices: ['Mars', 'Jupiter', 'Venus'],
        answer: 'Jupiter',
    },
    {
        question: 'What is the boiling point of water?',
        choices: ['100°C', '0°C', '50°C'],
        answer: '100°C',
    },
];
  
const Quiz: React.FC = () => {
    const [currentQuestion, setCurrentQuestion] = useState(0);
    const [score, setScore] = useState(0);
  
    const handleAnswer = (answer: string) => {
        if (answer === questions[currentQuestion].answer) {
            setScore(score + 1);
        }
  
        const nextQuestion = currentQuestion + 1;
        if (nextQuestion < questions.length) {
            setCurrentQuestion(nextQuestion);
        } else {
            alert(`Quiz finished. You scored ${score}/${questions.length}`);
        }
    };
  
    return (
        <div>
            <h1 className="text-center">Quiz App</h1>
            {currentQuestion < questions.length ? (
                <Question
                    question={questions[currentQuestion].question}
                    choices={questions[currentQuestion].choices}
                    answer={questions[currentQuestion].answer}
                    onAnswer={handleAnswer}
                />
            ) : "null"
            }
        </div>
    )
}
  
export default Quiz;


  • src/App.tsx: As we are done with implementing all the components in the project, let us now import them into the App.tsx to see them in action. 

Javascript




import Quiz from "./components/Quiz";
import 'bootstrap/dist/css/bootstrap.min.css';
  
function App() {
    return (
        <div className="container my-5">
            <Quiz />
        </div>
    );
}
  
export default App;


Output:

How to build a Quiz App with React and TypeScript

How to build a Quiz App with React and TypeScript

Whether you’re preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, neveropen Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we’ve already empowered, and we’re here to do the same for you. Don’t miss out – check it out now!
Dominic
Dominichttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Dominic
32361 POSTS0 COMMENTS
Milvus
88 POSTS0 COMMENTS
Nango Kala
6728 POSTS0 COMMENTS
Nicole Veronica
11892 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11954 POSTS0 COMMENTS
Shaida Kate Naidoo
6852 POSTS0 COMMENTS
Ted Musemwa
7113 POSTS0 COMMENTS
Thapelo Manthata
6805 POSTS0 COMMENTS
Umr Jansen
6801 POSTS0 COMMENTS