개발자도구 Application탭 > localStorage 에서 확인가능
// 1. 저장
localStorage.setItem('data명', '저장할data'); //string만 저장가능
// 2. 읽기
localStorage.getItem('data명');
// 3. 삭제
localStorage.removeItem('data명')
👉🏻 localStorage는 수정이 불가하므로 삭제→다시 저장과정을 통해 수정해야 함!
👉🏻 localStorage는 문자형(string)으로만 데이터를 저장하기 때문에,
array/object자료를 저장할 때 JSON으로 변환하여 저장해야 함
저장 : string → JSON 변환하여 저장 JSON.stringify()
읽기 : JSON → string 변환하여 읽기 JSON.parse()
// 1. array/object 저장
localStorage.setItem('data명', JSON.stringify({ name : noi }))
// 2. array/object 읽기
let data변수명1 = localStorage.getItem('data명') // 저장해둔 데이터를 data변수명1에 저장
let data변수명2 = JSON.parse(data변수명1) //data변수명2에 array/object자료 저장됨
//data변수명1에 똑같이 저장해도 상관없음
useEffect()
를 통해 메인페이지에 접속할 때마다 최근 본 상품이 있는지 없는지 검사하고useEffect()
를 통해 메인페이지에서 만들어놓은 localStorage의 현재 'watched'를getItem()
을 통해 가져온 후 변수(watchedData)에 저장,push()
하여 다시 setItem()
을 통해 localStorage에 저장/* App.js (메인페이지) */
function App(){
useEffect(()=>{
// 현재 localStorage의 watched에 데이터가 없을때만 초기화 배열 [] 저장
if (localStorage.getItem('watched').length <= 0){
localStorage.setItem('watched', JSON.stringify( [] ))
}
}, [])
}
/* Detail.js (제품상세페이지) */
function Detail(props){
(중략)
// useParams : URL파라미터에 입력한 값 가져와줌 (파라미터 사용하기)
// product에 URL파라미터 id와 제품 고유의 id가 일치하는 값 저장
// 관련 포스팅은 아래 참고
let {id} = useParams();
let product = props.shoes.find((x)=>{ return x.id == id });
useEffect(()=>{
// localStorage는 수정이 불가하므로 데이터 가져와서 업데이트 후 다시 저장해야 함
let watchedData = localStorage.getItem('watched') //현재 watched 가져오기
watchedData = JSON.parse(watchedData) //읽기 : JSON → string
watchedData.push(product.id) // 현 제품 id 업데이트
//중복제거하기
watchedData = new Set(watchedData) //집합으로 만들었다가(중복제거)
watchedData = Array.from(watchedData) //배열로 바꾸기
//중복제거된 업데이트 배열 재저장
localStorage.setItem('watched', JSON.stringify(watchedData))
}, [])
}
👉🏻 내 포스팅(URL파라미터 관련) : [React] Router (React-Router-Dom, URL파라미터)
JSON.stringify()
JSON.parse()
getItem('자료명')
로 가져와서 가공하여 변수에 저장setItem('변수명',변수)
로 변수에 저장된 내용 재저장