📅2024. 03. 26 72일차
//생략
return (
<>
<TodoWriteForm
newTodoTitle={newTodoTitle}
setNewTodoTitle={setNewTodoTitle}
addTodo={addTodo}
/>
<hr />
<div>{JSON.stringify(todos)}</div>
</>
);
리턴 부분에서 {JSON.stringify(todos)}가 아닌 리스트 형식으로
return (
<>
<TodoWriteForm
newTodoTitle={newTodoTitle}
setNewTodoTitle={setNewTodoTitle}
addTodo={addTodo}
/>
<hr />
<ul>
{todos.map((todo, index) => (
<li key={index}>{todo}</li>
))}
</ul>
</>
);
이렇게 하면?? 일단 리스트 형식으로 바뀜
return (
<>
<TodoWriteForm
newTodoTitle={newTodoTitle}
setNewTodoTitle={setNewTodoTitle}
addTodo={addTodo}
/>
<hr />
<div>
{todos.length == 0 ? (
<h5>님 할일 없음????</h5>
) : (
<>
<h5>새 할일</h5>
<nav>
<ul>
{todos.map((todo, index) => (
<li>
{index + 1}번 째 할일 : {todo}
</li>
))}
</ul>
</nav>
</>
)}
</div>
</>
);
//생략
const TodoList = ({todos}) => {
return (
<>
<div>
{todos.length == 0 ? (
<h5>님 할일 없음????</h5>
) : (
<>
<h5>새 할일</h5>
<nav>
<ul>
{todos.map((todo, index) => (
<li>
{index + 1}번 째 할일 : {todo}
</li>
))}
</ul>
</nav>
</>
)}
</div>
</>
);
};
const App = () => {
//생략
return (
//생략
<hr />
<TodoList todos={todos}/>
</>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
//생략
const TodoListItem = ({ todo, index }) => {
return (
<>
<li>
{index + 1}번 째 할일 : {todo}
</li>
</>
);
};
const TodoList = ({ todos }) => {
return (
<div>
{todos.length == 0 ? (
<h5>님 할일 없음????</h5>
) : (
<>
<h5>새 할일</h5>
<nav>
<ul>
{todos.map((todo, index) => (
<TodoListItem key={index} todo={todo} index={index} />
))}
</ul>
</nav>
</>
)}
</div>
);
};
//생략
const TodoListItem = ({ todo, index, removeTodo }) => {
return (
<li>
{index + 1}번째 할일 : {todo}
<button className="btn btn-secondary" onClick={() => removeTodo(index)}>삭제</button>
</li>
);
};
삭제 버튼 구현
const TodoList = ({ todos, removeTodo }) => {
return (
<div>
{todos.length === 0 ? (
<h5>할 일이 없습니다.</h5>
) : (
<>
<h5>할 일 목록</h5>
<nav>
<ul>
{todos.map((todo, index) => (
<TodoListItem key={index} todo={todo} index={index} removeTodo={removeTodo} />
))}
</ul>
</nav>
</>
)}
</div>
);
};
removeTodo={removeTodo} 추가
const App = () => {
const [todos, setTodos] = useState([]);
const [newTodoTitle, setNewTodoTitle] = useState("");
const addTodo = () => {
const trimmedTitle = newTodoTitle.trim();
if (trimmedTitle.length === 0) return;
setTodos([...todos, trimmedTitle]);
setNewTodoTitle("");
};
const removeTodo = (index) => {
setTodos(todos.filter((_, _index) => _index !== index));
};
return (
<>
<TodoWriteForm
newTodoTitle={newTodoTitle}
setNewTodoTitle={setNewTodoTitle}
addTodo={addTodo}
/>
<hr />
<TodoList todos={todos} removeTodo={removeTodo} />
</>
);
};
매개변수 index를 받고 filter 함수 사용 배열 필터링 _index와 index비교하여 일치하면 삭제