Experiment 15: ReactJS Applications – To-do list and Quiz

 Design to-do list application


App.js


import React, { useState } from "react";

import "./App.css";


function App() {

  const [task, setTask] = useState("");

  const [tasks, setTasks] = useState([]);


  // Add Task

  const addTask = () => {

    if (task.trim() === "") return;


    const newTask = {

      id: Date.now(),

      text: task,

      completed: false

    };


    setTasks([...tasks, newTask]);

    setTask("");

  };


  // Delete Task

  const deleteTask = (id) => {

    setTasks(tasks.filter((t) => t.id !== id));

  };


  // Toggle Complete

  const toggleComplete = (id) => {

    setTasks(

      tasks.map((t) =>

        t.id === id ? { ...t, completed: !t.completed } : t

      )

    );

  };


  return (

    <div className="container">

      <h2>To-Do List Application</h2>


      <div className="input-section">

        <input

          type="text"

          placeholder="Enter a task..."

          value={task}

          onChange={(e) => setTask(e.target.value)}

        />

        <button onClick={addTask}>Add</button>

      </div>


      <ul>

        {tasks.map((t) => (

          <li key={t.id} className={t.completed ? "completed" : ""}>

            <span onClick={() => toggleComplete(t.id)}>

              {t.text}

            </span>

            <button onClick={() => deleteTask(t.id)}>Delete</button>

          </li>

        ))}

      </ul>

    </div>

  );

}


export default App;



App.css


body {

  font-family: Arial, sans-serif;

  background-color: #f4f4f4;

}


.container {

  width: 400px;

  margin: 50px auto;

  text-align: center;

  background: white;

  padding: 20px;

  border-radius: 8px;

  box-shadow: 0px 0px 10px rgba(0,0,0,0.1);

}


.input-section {

  display: flex;

  justify-content: space-between;

  margin-bottom: 20px;

}


input {

  width: 70%;

  padding: 8px;

}


button {

  padding: 8px 12px;

  cursor: pointer;

  border: none;

  background-color: #007bff;

  color: white;

  border-radius: 4px;

}


button:hover {

  background-color: #0056b3;

}


ul {

  list-style-type: none;

  padding: 0;

}


li {

  display: flex;

  justify-content: space-between;

  padding: 8px;

  border-bottom: 1px solid #ddd;

}


.completed span {

  text-decoration: line-through;

  color: gray;

}


Comments

Popular posts from this blog

Experiment 1: Node.js

Experiment 10: ReactJS – Render HTML, JSX, Components – function & Class

Experiment 6: ExpressJS – Routing, HTTP Methods, Middleware