210805
JavaScript #23
-todo.js
if(savedToDos!==null){
const parsedToDos = JSON.parse(savedToDos)
parsedToDos.forEach(paintToDo);
}
forEach로 array의 각 item에 paintToDo를 시킨다.
새로고침을 해도 계속 paint해주기 때문에 사라지지 않는다.
하지만 새로 입력을 하고 새로고침을 해주면 이전에 저장된 local storage의 값에 덮어씌운다.
이유는 const toDos = [] 으로
실핼될 때 마다 비어지게 되기때문이다.
-const / let
1. toDos 를 const가 아닌 let으로 변경하여 업데이트가 되도록 한다.
2. toDos에 이전의 toDos를 그대로 가지도록 한다.
(조건 -> 저장된 값이 있을 때)
const toDoForm = document.getElementById('todo-form')
const toDoInput = toDoForm.querySelector('input')
const toDoList = document.getElementById('todo-list')
const TODOS_KEY = 'todos'
let toDos = []
function saveToDos() {
// local storage에 저장하는 함수
localStorage.setItem(TODOS_KEY, JSON.stringify(toDos))
}
function deleteToDO(event) {
// todo 삭제 함수
const li = event.target.parentElement
li.remove()
}
function paintToDo(newTodo) {
const li = document.createElement('li')
const span = document.createElement('span')
span.innerText = newTodo
const button = document.createElement('button')
button.innerText = '❌'
button.addEventListener('click', deleteToDO)
li.appendChild(span)
li.appendChild(button)
toDoList.appendChild(li)
}
function handleToDoSubmit(event) {
event.preventDefault()
console.log(toDoInput.value)
const newTodo = toDoInput.value // 값을 복사
toDoInput.value = '' // 엔터를 치고 값을 비운다.
toDos.push(newTodo) // toDos에 push
paintToDo(newTodo) // todo를 화면에 보여주는 함수
saveToDos() // todo 저장하는 함수 호출
}
toDoForm.addEventListener('submit', handleToDoSubmit)
function sayHello(item) {
console.log('this is the turn of', item)
}
const savedToDos = localStorage.getItem(TODOS_KEY)
if (savedToDos !== null) {
const parsedToDos = JSON.parse(savedToDos)
toDos = parsedToDos
parsedToDos.forEach(paintToDo)
}
새로고침 이후에도 추가가 된다.