본문 바로가기
  • 삽질하는 자의 블로그
JavaScript

5. localStorage 에 대하여. [ WEB API ]

by 이게뭐당가 2023. 2. 3.

로컬스토리지를 사용해보자.

 

로컬스토리지는 

저장가능 용량이 무한하고,

온갖 종류의 데이터를 전부 저장할 수 있으며

도메인 별로 저장한다는 특징을 가지고 있다.

 

또한 로컬스토리지에는 "문자열" 만 저장할 수 있다.

뭘 저장해도 전부 "string" 이 된다.

 

쿠키나 세션스토리지와는 달리 브라우저를 종료해도 사라지지 않는다.

 

로컬스토리지의 사용방법

  • setItem() - key, value 추가
  • getItem() - value 읽어 오기
  • removeItem() - item 삭제
  • clear() - 도메인 내의 localStorage 값 삭제
  • length - 전체 item 갯수
  • key() - index로 key값 찾기

단순하지만, 중요한 한가지는 value 를 저장할때 "원시값" 과 "객체, 배열" 의 차이가 존재한다.

물론 value 가져올때도 적용된다.

 

원시값은 "key" "value" 로 저장하지만,

객체, 배열의 경우에는 "value" 를 넣을때, 반드시 Json Data 로 넣어야한다.

 

실제 예시를 보도록 하자.

 

1. 로컬스토리지에 값 넣기 ( setItem )

 

원시값

window.localStorage.setItem("key", "value");

 

배열, 객체

window.localStorage.setItem("key", JSON.stringify(...));

 

 

2. 로컬스토리에 값 가져오기 ( getItem )

 

원시값

const data = window.localStorage.getItem("key");
console.log(data)

 

배열, 객체

const data = window.localStorage.getItem("key");
console.log(JSON.parse(data))

 

3. 로컬스토리에 값 삭제하기 ( removeItem )

 

window.localStorage.removeItem("key");

 

4.로컬스토리에 값 전부 삭제하기 ( clear )

 

window.localStorage.clear();

 

 

추가적으로

1. 로컬스토리지에 같은 키 값으로 새 값을 넣으면, 새 값으로 대체된다.

2. 로컬스토리지에 아무것도 없는 값을 getItem 으로 가져오면, 초기에는 undefined, 가져오면 null 이 가져와진다.

 

따라서, 조건을 설정할때,

  useEffect(() => {
    const testResult = window.localStorage.getItem("test-result");

    if (testResult === null || testResult === "undefined") {	   // 데이터없으면 방출
      router.replace("/");
    }
  }, []);

이런식의 조건을 설정하는게 옳다.

 

3. Nextjs 의 경우, 초기 렌더시 window나 document 객체가 생성되어 있지 않아 참조할 수 없다.

따라서, useEffect 을 꼭 사용하여 렌더 이후에 참조하게 만들자.

댓글