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
Post a Comment