localStorage를 사용하면 웹 브라우저에 로컬데이터를 저장할 수 있기 때문에 데이터 불러오기, 추가 및 삭제가 가능하다.
데이터 저장하기
localStorage.setItem('key', 'value')
데이터 가져오기
localStorage.getItem('key')
데이터 삭제하기
localStorage.removeItem('key')
localStorage에 반영된 데이터를 확인하는 방법
localStorage.setItem
// localStorage에 리뷰 리스트 저장
reviews = []
function saveReviews() {
localStorage.setItem("reviews", JSON.stringify(reviews));
}
localStorage.getItem
// localStorage에 저장된 리뷰 리스트 불러오기
const savedReviews = localStorage.getItem("reviews");
if (savedReviews !== null) {
const parsedReviews = JSON.parse(savedReviews);
reviews = parsedReviews;
parsedReviews.forEach(drawReviews);
}
const deleteBtn = document.querySelector(".deleteBtn");
deleteBtn.addEventListener("click", function (event) {
const li = event.target.parentElement; // 부모 요소
// 요소 삭제
li.remove();
// 선택한 id값을 제외한 배열 반환
reviews = reviews.filter((review) => review.id !== parseInt(li.id));
// localStorage에 저장
localStorage.setItem("reviews", JSON.stringify(reviews));
});
JSON.parse() 메서드는 JSON 문자열의 구문을 분석하고, 그 결과에서 JavaScript 값이나 객체를 생성한다.
JSON.stringify() 메서드는 JavaScript 값이나 객체를 JSON 문자열로 변환한다.
const deleteBtn = document.querySelector(".deleteBtn");
deleteBtn.addEventListener("click", function (event) {
const li = event.target.parentElement;
console.log(typeof li.id);
li.remove();
reviews = reviews.filter((review) => review.id !== parseInt(li.id)); // 선택한 값을 제외한 배열 반환
saveReviews();
});
위와 같이 querySelector
로 가져온 삭제 버튼에 addEventListener
메서드를 호출했을 때
추가된 리스트에서 삭제 버튼을 누르면 첫번째 리스트만 삭제 되는 문제가 생겼다.
모든 리스트 요소에서 삭제 버튼이 구동하도록 하기 위해 querySelectorAll
을 사용해서 모든 삭제 버튼을 가져온 뒤 추가된 모든 버튼 요소를 선택한 배열에 forEach 배열 메서드를 사용해서 각 요소의 값을 가져올 수 있도록 하였다.
const deleteBtnAll = document.querySelectorAll(".deleteBtn");
deleteBtnAll.forEach((item, index) => {
item.addEventListener("click", function (event) {
let reviewEl = event.target.parentElement; // 부모 요소
const pwElement = reviewEl.querySelector("#password");
const prevPw = pwElement.getAttribute("data-value"); // 저장된 password 값
let savedID = parseInt(event.target.id); // 저장된 id 값
handleModal(reviewEl, savedID, prevPw);
});
});
위와 같이 코드를 수정하니 모든 리스트 요소의 삭제 버튼이 원하는 대로 동작하는 것을 알 수 있었다.
오늘은 웹 브라우저에 데이터를 저장할 수 있도록 localStorage를 사용하여 데이터 저장 및 불러오기 실습을 진행하면서 locaStorage을 사용하는 방법을 알아보았다.