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>
);
}
'Project > Todolist' 카테고리의 다른 글
[Header,ToDoList,App]_필터적용 (0) | 2022.12.20 |
---|---|
Todo_삭제하기 (0) | 2022.12.19 |
고유한 아이디 라이브러리 (0) | 2022.12.19 |
ToDoList_추가하기 구현 (0) | 2022.12.19 |
ToDoList_리스트구현하기(map) (0) | 2022.12.18 |