songdev
songdev
songdev
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • Web 개발 (6)
    • 리눅스 (5)
    • git (5)
    • Bigdata (8)
      • 하둡 Architecture 번역 (6)
      • Ambari (2)
    • 코테 (22)
      • 프로그래머스 (22)
    • 자격증 (7)
      • 정보처리기사 (5)
      • SQLD (2)
    • 스터디 (18)
      • 웹 프로그래밍 (3)
      • 개념정리 (4)
      • 예제 (6)
      • 바닐라 JS로 크롬 앱 만들기 (5)
    • 일상 (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 향상된 버블정렬
  • copyOfRange()
  • sort()
  • 배열의 복사
  • 리눅스
  • 정보처리기사
  • javascript
  • 깃허브
  • 프로그래머스
  • parseInt()
  • github
  • 정렬
  • 배열
  • charAt()
  • SQLD
  • level1
  • 정보처리기사 필기
  • github push
  • 자바스크립트
  • Java

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
songdev

songdev

스터디/바닐라 JS로 크롬 앱 만들기

JavaScript의 localStorage.getItem()과 setItem()

2021. 1. 21. 15:58
반응형
const toDoForm = document.querySelector(".js-toDoForm"),
    toDoInput = toDoForm.querySelector("input"),
    toDoList = document.querySelector(".js-toDoList");


const TODOS_LS = 'toDos';
const toDos = [];

function saveToDos()
{
    console.log(11111);
    // 입력된 todo를 String 형태로 TODOS_LS에 담아두기
    localStorage.setItem(TODOS_LS, JSON.stringify(toDos));
}

function paintToDo(text)
{
    //console.log(text);
    const li = document.createElement("li");
    const delBtn = document.createElement("button");
    const span = document.createElement("span");
    const newId = toDos.length + 1;

    delBtn.innerHTML = "❌";
    span.innerText = text;
    li.appendChild(delBtn);
    li.appendChild(span);
    li.id = newId;

    toDoList.appendChild(li);   // 입력된 정보 뿌려주기

    const toDoObj = 
    {
        text: text,
        id: newId
    };
    toDos.push(toDoObj);
    saveToDos();
}
    
function handleSubmit(event)
{
    event.preventDefault();
    const currentValue = toDoInput.value;
    paintToDo(currentValue);
    toDoInput.value = "";
}

function loadToDos()    // 페이지가 로드될때 기존 등록되어 있는 todo들을 조회해서 뿌려주기
{
    const loadedToDos = localStorage.getItem(TODOS_LS);
    //console.log(loadedToDos);     이건 String
    if(loadedToDos !== null)    // 기존에 등록된 todo가 있으면
    {
        const parsedToDos = JSON.parse(loadedToDos);    // JSON 형태로 만들어서
        parsedToDos.forEach(function(toDo){             // 각 항목들마다
            //console.log(toDo.text);
            paintToDo(toDo.text);                       // text값을 뿌려주기
        });
    }
}

function init()
{
    loadToDos();
    toDoForm.addEventListener("submit", handleSubmit)
}

init();

localStorage란, 데이터를 사용자 로컬에 보존하는 방식이다.

쿠키와는 다르게 유효 기간이 존재하지 않는다.

 

위의 코드는 기존에 입력된 toDos내용을, 로컬에 저장시켜 두었다가 화면에 뿌려주고

새로 등록한 todo는 리스트에 추가해주는 코드이다.

 

1)

첫 번째로 이해가 안갔던 부분은, 6번줄에 const TODOS_LS = 'toDos'; 이 상수 선언하는 부분이다.

51번줄에서 localStorage.getItem(TODOS_LS)를 통해서 기존에 등록된 todo리스트들을 다 받아오고 있는데,

그냥 상수인 TODOS_LS를 어떻게 저장된 todo객체로 알아서 인식해서 가져오는지 이해가 안갔다.

 

확인해보니,

그냥 상수인 TODOS_LS를 가져오는것이 아니라, 13번줄에서 setItem()으로 넣어줬기 때문에 가능한 것이였다.

setItem()의 첫번째 인자에 TODOS_LS라는 이름에 실제 등록된 todo데이터가 담겨있는 toDos배열을 String타입으로 담아두었다가, 51번줄에서 TODOS_LS라는 키값으로 꺼내온것이다.

 

따라서 6번줄은, 

1. "toDos"를 매번 치지 않고 안전하게 상수 TODOS_LS로 관리하기 위해서

2. ""안에 들어있는 이름으로 todo리스트들을 담아내기

 

이런 역할을 가지고 있다.

// const TODOS_LS = 'aaaaa'; 로 작성하면 todos 객체명은 aaaaa로 등록된다.

 

2)

두 번째로 이해가 안갔던 부분은, 58번줄에서 기존 리스트들을 뿌려주는 paintToDo(toDo.text); 함수를 호출할때

paintToDo()함수 안에는 saveToDos(); 를 부르고 있는데 중복으로 값이 저장되지 않는 부분이다.

 

확인해보니,

setItem() 함수는 이미 동일한 이름의 값이 있을 때는 중복저장 되는 것이 아니라 업데이트를 한다고 한다.

따라서 내부적으로는 업데이트가 된 것이지만 기존에 있던 toDo.text의 값으로 매개변수를 넘겨주고 있기 때문에,

변경사항이 없어 보이는 것이였다.

 

 

반응형

'스터디 > 바닐라 JS로 크롬 앱 만들기' 카테고리의 다른 글

JavaScript의 forEach()와 filter()  (0) 2021.01.22
JavaScript DOM 이벤트 refefence  (0) 2021.01.20
JavaScript의 addEventListener() 란?  (0) 2021.01.19
let, const, var  (0) 2021.01.13
    '스터디/바닐라 JS로 크롬 앱 만들기' 카테고리의 다른 글
    • JavaScript의 forEach()와 filter()
    • JavaScript DOM 이벤트 refefence
    • JavaScript의 addEventListener() 란?
    • let, const, var
    songdev
    songdev

    티스토리툴바