Project/Todolist
ToDo_삭제하기구현
ecoEarth
2022. 12. 20. 15:24
ToDoList.jsx
import React, { useState } from "react";
import AddTodo from "../AddTodo/AddTodo";
import { v4 as uuidv4 } from "uuid";
import Todo from "../\bTodo/Todo";
export default function ToDoList() {
const [todos, setTodos] = useState(initialState);
const handleAdd = (todo) => setTodos([...todos, todo]);
const handleUpdate = (updated) =>
setTodos(todos.map((t) => (t.id === updated.id ? updated : t)));
const handleDelete = (deleted) =>
setTodos(todos.filter((t) => t.id !== deleted.id));
return (
<section>
<ul>
{todos.map((item) => (
<Todo
key={item.id}
todo={item}
onUpdate={handleUpdate}
onDelete={handleDelete}
/>
))}
</ul>
<AddTodo onAdd={handleAdd} />
</section>
);
}
const initialState = [
{ id: uuidv4(), text: "장보기", status: "active" },
{ id: uuidv4(), text: "공부하기", status: "active" },
];
ToDo.jsx
import React from "react";
import { HiTrash } from "react-icons/hi";
export default function Todo({ todo, onUpdate, onDelete }) {
const { text, status } = todo;
const handleChange = (e) => {
const status = e.target.checked ? "completed" : "active";
onUpdate({ ...todo, status: status });
};
const handleDelete = () => onDelete(todo);
return (
<li>
<input
type="checkbox"
id="checkbox"
checked={status === "completed"}
onChange={handleChange}
/>
<label htmlFor="checkbox">{text}</label>
<button onClick={handleDelete}>
<HiTrash />
</button>
</li>
);
}