localStorage를 사용해보자

img

LocalStorage 의 특징

사용처

  1. 최근 본 상품

LocalStorage 써보기

//저장
localStorage.setItem('key', 'value')

//출력
localStorage.getItem('key')

//삭제
localStorage.removeItem('age')

//수정은 꺼내서 값을 바꾸고 다시 저장해야한다.

//sessionStorage도 동일한 방법으로 사용가능하다
let obj = { name : "park"}
localStorage.setItem('data', JSON.stringify(obj))
// json을 string으로 변환해주는 JSON.stringify를 사용

let result =  localStroage.getItem('data') //JSON string으로 그대로 출력된다. Obj용 함수사용은 아직 불가능하다.

let result = JSON.parse(localStorage.getItem('data')) //이러면 바로 Obj가 된다.

예제

  1. 상세페이지에서 봤던 상품들의 번호들을 Local Storage에 저장하기
    • 주의1. 중복 번호 막기 (set자료형을 사용)
    • 사이트 처음 접속한 사람에게 자료형을 먼저 만들어야한다 (그러면 뭘써야할까?)
  2. localStorage을 통해 최근 본 상품 사이드 네비 바를 만들어보자.

풀이

1번

//우선 처음 접속한 사람들에게 자료구조를 먼저 만들고
useEffect(()=>{
    localStorage.setItem('watched',JSON.stringify( [] ))
},[])

let [recent, setRecent] = useState(JSON.parse(localStorage.getItem('watched')));

//버튼에 로직 추가
onClick={() => {
    //값을 불러와 set으로 중복 제거
    let arr = new Set(JSON.parse(localStorage.getItem('watched'))).add(props.shoe.id); 
    //추가된 값을 다시 localStorage에 저장
    localStorage.setItem('watched', JSON.stringify([...arr]));
    //페이지 이동
    navigate(link);
}}

2번

{/* Local Storage 보여주기 */}
{recent.length != 0 ?
    <>
      <Row xs="auto" className='mt-4'>
        <div className="w-full flex justify-between">
          <div className='flex items-center'>최근 본 목록</div>
          <button className="btn btn-warning" onClick={()=>setRecent([])}>목록 삭제</button>
        </div>

      </Row>
      <div className="row mt-4">
        {
          recent.map(function (item, index) {
            return (
              <Compo key={item} shoe={shoes[item]} recent={recent}></Compo>
            )
          })
        }
      </div>
    </>
: null}

다른 풀이

   useEffect(()=> {
    let arr = localStorage.getItem('watched');
    arr = JSON.parse(arr)
    arr.push(찾은상품.id)
    arr = new Set(arr)
    arr = Array.from(arr)
    localStorage.setItem('watched', JSON.stringify(arr))
  }, [])

참고