반응형
LocalStorage
목표
아이템을 추가하고 리스트를 볼 수 있는 로컬저장소 구현하기
기본 코드
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>LocalStorage</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="wrapper">
<h2>LOCAL TAPAS</h2>
<p></p>
<ul class="plates">
<li>Loading Tapas...</li>
</ul>
<form class="add-items">
<input type="text" name="item" placeholder="Item Name" required>
<input type="submit" value="+ Add Item">
</form>
</div>
<script>
const addItems = document.querySelector('.add-items');
const itemsList = document.querySelector('.plates');
const items = [];
</script>
</body>
</html>
기능없이 레이아웃만 잡혀있는 코드
과정
- 아이템을 추가하는 함수 생성
- 추가한 아이템을 리스트로 보여주는 함수 생성
- 체크 여부를 저장하는 함수 생성
- 함수 호출
코드 분석
1. 아이템을 추가하는 함수 생성
const addItem = e => {
e.preventDefault();
const text = (e.target.querySelector('[name=item]')).value;
const item = {
text,
done: false
};
items.push(item);
populateList(items, itemsList);
localStorage.setItem('items', JSON.stringify(items));
e.target.reset();
}
preventDefault()
메소드는 새로운 정보 입력후 이벤트 실행을 막아주는 역할이다.text
에 텍스트를 새로 입력을 해줬을때 name의 value값을 저장하고 item
객체에 위에서 만든 text
값을 담고, done
속성에 false
를 담는다
다음은 빈 배열 items
에 item
을 담고
기존에 추가했던 함수를 리스트로 뽑아 낸 후에 text
창 초기화
2. 추가한 아이템을 리스트로 보여주는 함수 생성
const populateList = (plates = [], platesList) => {
platesList.innerHTML = plates.map((plate, i) => {
return `
<li>
<input type="checkbox" data-index=${i} id="item${i}" ${plate.done ? 'checked' : ''} />
<label for="item${i}">${plate.text}</label>
</li>
`;
}).join('');
}
popilateList
함수에 빈배열 plates
를 만들어 내용과 인덱스를 체크박스와 리스트형태로 반환하도록 한다
3. 체크 여부를 저장하는 함수 생성
const toggleDone = e => {
if (!e.target.matches('input')) return;
const el = e.target;
const index = el.dataset.index;
items[index].done = !items[index].done;
localStorage.setItem('items', JSON.stringify(items));
populateList(items, itemsList);
}
toggleDone
함수에 체크된 항목들은 done
값을 true로 저장해 다시 값을 불러 올 때 체크되어있는 상태로 불러와지도록 함수 생성 및 로컬스토리지에 저장
4. 함수 실행
addItems.addEventListener('submit', addItem);
itemsList.addEventListener('click', toggleDone);
populateList(items, itemsList);
submit
을 할 때 아이템이 추가되는 addItem
실행click
할 때 체크 여부와 done
여부가 저장되는 toggleDown
실행
마지막으로 저장된 아이템 리스트 호출
찾아본 내용, 알게된 내용들
reset()
- value를 초기화 할 때 사용