리액트
리액트로 todo list 만들기 2
효ㄷi
2024. 5. 16. 23:20
그 다음엔 먼저 TodoList로 분리하고, TodoList 내에서 중복되는 코드가 있어서
Todo로 분리했다.
일단 다 나눠버려서 TodoList는 이미 나눠진 코드다.
허헛
const TodoList = ({ todos, onDelete, moveDone }) => {
return (
<div className="todoList">
<div className="working">
<h2>Working🏃♀️</h2>
{todos.map((todo) => {
if (todo.isDone === false) {
return (
<Todo
key={todo.id}
todo={todo}
onDelete={onDelete}
moveDone={moveDone}
/>
);
}
})}
</div>
일단 todos, onDelete, moveDone을 가져와서
차례대로 넣어준다.
그리고 working에서 map을 돌리는데
todos (할 일 목록)에서 각 요소 todo가 isDone이 false (기본값)인 것만
working에 나오도록 뿌려준다.
done은 반대로 isDone을 true로 바꿔주면 된다.
그리고 TodoList 첫 부분에
import Todo from './Todo';
또 Todo를 분리해서 받아오도록 했는데,
const Todo = ({ todo, onDelete, moveDone }) => {
return (
<div className="workingTodo" key={todo.id}>
<h3>{todo.title}</h3>
<p>{todo.contents}</p>
<div className="workingBtn">
<button
className="deleteBtn"
onClick={() => {
onDelete(todo.id);
}}
>
삭제
</button>
<button className="doneBtn" onClick={() => moveDone(todo.id)}>
미완료 ↔️ 완료
</button>
</div>
</div>
);
};
이 Todo에는 이렇게 작성하는데,
isDone이 각각 false와 true로 다르므로...
그리고 삭제 버튼, done & working 으로 이동시켜주는 버튼도 넣어준다.
그럼 그걸 받아서 TodoList에서 뿌려주는 것.
간단하게 정리하자면, 이름대로 TodoList는 todo 목록을 관리하고,
todo는 개별 todo를 말한다.
TodoList는 카드 목록이 쫘악 뜨고
Todo는 각 todo 카드를 관리하는 거라 보면 될 듯 싶다.