Ted's Codding study

로컬 스토리지 Todo 예제 본문

JavaScript

로컬 스토리지 Todo 예제

Ted93 2024. 6. 2. 10:52

해당 페이지는 연습용으로 질문만 있고 정답은 다음 글에서 공개합니다

HTML 코드와 CSS 코드를 복붙한 후 main.js를 생성해서 아래 설명대로 한번 작성해보세요!

HTML 코드
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Todo List Application</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <input type="text" id="todoInput" placeholder="Add new task..." aria-label="New task input">
        <button onclick="addTodo()">Add Task</button>
        <ul id="todoList"></ul>
    </div>
    <script src="main.js"></script>
</body>
</html>
CSS 코드
body {
  background-color: #f4f4f4;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
}

.container {
  background: white;
  padding: 20px;
  border-radius: 8px;
  box-shadow: 0 2px 15px rgba(0, 0, 0, 0.1);
  width: 500px;
}

input[type='text'] {
  width: calc(100% - 22px);
  padding: 10px;
  margin-bottom: 10px;
  border: 2px solid #ddd;
  border-radius: 4px;
}

button {
  padding: 10px;
  background-color: #5cb85c;
  border: none;
  border-radius: 4px;
  color: white;
  font-size: 16px;
  cursor: pointer;
}

button:hover {
  background-color: #4cae4c;
}

ul {
  list-style: none;
  padding: 0;
}

li {
  background: #eee;
  margin-top: 8px;
  padding: 10px;
  border-radius: 4px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

button.deleteBtn {
  background-color: #d9534f;
  border: none;
  border-radius: 4px;
  padding: 5px 10px;
  color: white;
  cursor: pointer;
  width: 80px;
  min-width: 60px;
}

button.deleteBtn:hover {
  background-color: #c9302c;
}

#error {
  color: red;
  text-align: center;
}
.hidden {
  visibility: hidden;
}

1. 할 일 목록을 저장할 빈 배열을 선언

let todos = [];

 

2. DOMContentLoaded 이벤트가 발생하면, 즉 문서 로딩이 완료되면 함수들을 실행

☝ 로직
1. 기존에 todos에서 로컬스토리지에 저장된 값이 있다면 꺼내오고 없다면 빈 배열을 할당
2. 렌더링 함수를 호출 (밑에서 구현 예정)

 

3. 할 일을 추가하는 함수

☝ 로직
1. addTodo 함수 구현
2. input을 가져오고, 새로운 투두에 그 인풋의 값을 넣어줌
3. 만약 새로운 투두가 있다면, 투두리스트에 추가해주고
4. 로컬 스토리지에도 추가해줌
5. 렌더링 함수를 호출하고, 인풋의 값은 비워줌

 

4. 할 일 목록을 렌더링하는 함수

☝ 로직
1. list를 가져오고, list의 HTML을 빈 값으로 할당
2. todos배열을 순회하면서, li 요소를 생성
3. li 요소의 값은 todo로 채워줌
4. delete 버튼을 생성하고 값은 Delete로 채워줌
5. delete 버튼을 클릭했을 때 removeTodo 함수를 호출
6. removeTodo 함수는 (밑에서 구현 예정)
7. li 요소의 자식으로 버튼을 추가하고
8. list의 자식으로 li를 추가

 

5. 할 일을 삭제하는 함수

☝ 로직
1. index를 인자로 받아옴
2. 배열의 메소드를 호출해서 인자로 넣어준 index를 삭제
3. 로컬 스토리지에도 업데이트
4. 렌더링 함수를 호출

 

노션으로 보고 싶다면?

https://short-echidna-b16.notion.site/Todo-23b6602b8fe44956a57fc234c81d8fe1?pvs=4

 

로컬 스토리지 Todo 예제 | Notion

해당 페이지는 연습용으로 질문만 있고 정답은 다음 글에서 공개합니다

short-echidna-b16.notion.site