diff --git a/src/TodoAccordion.jsx b/src/TodoAccordion.jsx
index 6fb2812..8223aad 100644
--- a/src/TodoAccordion.jsx
+++ b/src/TodoAccordion.jsx
@@ -1,6 +1,7 @@
+/* eslint-disable react/prop-types */
//TodoAccordion.jsx
-import { useState } from 'react';
-import {initialContent} from './NotProblem';
+import { useState } from "react";
+import { initialContent } from "./NotProblem";
// 문제 3.
// TodoPanel이 한번에 하나만 열리도록 수정해주세요.
@@ -10,33 +11,35 @@ import {initialContent} from './NotProblem';
// 3. 상위 컴포넌트에서 정의한 이벤트 핸들러와 활성 여부를 TodoPanel 컴포넌트로 전달합니다.
export default function TodoAccordion() {
+ const [openIndex, setIsOpenIndex] = useState(0);
+ console.log("init", initialContent);
return (
-
+
이전 Todo List
- {
- initialContent.map((content, index) => (
-
- {content.content}
-
- ))
- }
+ {initialContent.map((content, index) => (
+
+ {content.content}
+
+ ))}
- )
+ );
}
-function TodoPanel({title, children}) {
- const [isOpen, setIsOpen] = useState(false);
+function TodoPanel({ idx, title, children, openIndex, setIsOpenIndex }) {
return (
{title}
- {isOpen ? (
+ {openIndex === idx ? (
{children}
- ): (
-
+ ) : (
+
)}
-
- )
-}
\ No newline at end of file
+
+ );
+}
diff --git a/src/TodoContent.jsx b/src/TodoContent.jsx
index 51370fd..6aafc32 100644
--- a/src/TodoContent.jsx
+++ b/src/TodoContent.jsx
@@ -1,6 +1,6 @@
//TodoList.jsx
-import { useState } from 'react';
-import { initialTodos, AddTodo, TodoList } from './NotProblem';
+import { useEffect, useState } from "react";
+import { initialTodos, AddTodo, TodoList } from "./NotProblem";
// 문제 2.
// todo를 삭제했을 때 total과 doneCount가 올바르게 업데이트되지 않아요.
@@ -8,14 +8,12 @@ import { initialTodos, AddTodo, TodoList } from './NotProblem';
// 힌트: 필요 없는 state는 제거하고, 필요한 값은 바로 사용하세요.
export default function TodoContent() {
const [todos, setTodos] = useState(initialTodos);
- const [total, setTotal] = useState(initialTodos.length);
const [doneCount, setDoneCount] = useState(0);
function handleAddTodo(title) {
- setTotal(total + 1);
setTodos([
...todos,
- { id: initialTodos.length++, title: title, isDone: false }
+ { id: initialTodos.length++, title: title, isDone: false },
]);
}
@@ -25,22 +23,34 @@ export default function TodoContent() {
} else {
setDoneCount(doneCount - 1);
}
- setTodos(todos.map(prevTodo => (
- prevTodo.id === nextTodo.id ? nextTodo : prevTodo
- )));
+ setTodos(
+ todos.map((prevTodo) =>
+ prevTodo.id === nextTodo.id ? nextTodo : prevTodo
+ )
+ );
}
function handleDeleteTodo(todoId) {
- setTotal(total - 1);
- setTodos(todos.filter(prevTodo => prevTodo.id !== todoId));
+ const newTodo = todos.filter((prevTodo) => prevTodo.id !== todoId);
+ const todoCnt = newTodo.filter((todo) => todo.isDone === true);
+ setTodos(newTodo);
+ setDoneCount(todoCnt.length);
}
return (
-
-
완료한 일: {doneCount}/{total}
+
+
+ {" "}
+ 완료한 일: {doneCount}/{todos.length}
+
- )
-}
\ No newline at end of file
+ );
+}
diff --git a/src/TodoHeader.jsx b/src/TodoHeader.jsx
index fe1e63a..7b77514 100644
--- a/src/TodoHeader.jsx
+++ b/src/TodoHeader.jsx
@@ -1,14 +1,13 @@
+/* eslint-disable react/prop-types */
//Todo.jsx
-import { useState } from "react";
// 문제 1.
// TodoHeader의 색상이 올바르게 업데이트되도록 수정해주세요.
-// 힌트: 필요 없는 state는 제거하세요.
-export default function TodoHeader(props) {
- const [color, setColor] = useState(props.color);
+// 힌트: 필요 없는 state는 제거하세요.
+export default function TodoHeader({ color }) {
return (
-
+
Todo List
);
-}
\ No newline at end of file
+}