Pract 14 Code
Pract 14 Code
Aim : To install React Hook & use the Hooks as such usestate, useEffect and
useContext in your basic program.
App.jsx
useEffect(() => {
console.log("Current todos:", todos)
}, [todos])
return (
<TodoContext.Provider
value={{ todos, newTodo, setNewTodo, addTodo, toggleTodo,
removeTodo }}
>
{children}
</TodoContext.Provider>
)
}
return (
<div className="flex items-center justify-center min-h-screen
bg-gradient-to-r from-blue-100 to-purple-100 p-4">
<Card className="w-full max-w-md shadow-xl">
<CardHeader>
<CardTitle className="text-2xl font-bold text-center
text-gray-800">Todo List</CardTitle>
</CardHeader>
<CardContent>
<div className="flex space-x-2 mb-4">
<Input
type="text"
value={newTodo}
onChange={(e) => setNewTodo(e.target.value)}
placeholder="Add a new task"
className="flex-grow"
onKeyPress={(e) => e.key === 'Enter' && addTodo()}
/>
<Button onClick={addTodo} className="bg-blue-500
hover:bg-blue-600">
<PlusCircle className="w-5 h-5" />
</Button>
</div>
<ul className="space-y-2">
{todos.map((todo, index) => (
<li
key={index}
className={`flex items-center justify-between p-3 rounded-lg
transition-all duration-300 ${
todo.completed ? "bg-green-100" : "bg-white"
}`}
>
<div className="flex items-center space-x-3">
<button onClick={() => toggleTodo(index)}
className="focus:outline-none">
{todo.completed ? (
<CheckCircle className="w-5 h-5 text-green-500" />
):(
<Circle className="w-5 h-5 text-gray-400" />
)}
</button>
<span className={`${todo.completed ? "line-through
text-gray-500" : "text-gray-800"}`}>
{todo.text}
</span>
</div>
<button
onClick={() => removeTodo(index)}
className="text-red-500 hover:text-red-600
focus:outline-none"
>
<Trash2 className="w-5 h-5" />
</button>
</li>
))}
</ul>
</CardContent>
</Card>
</div>
)
}
return (
<TodoProvider>
<TodoListContent />
</TodoProvider>
)
}