-
[React] localStorage 브라우저 데이터 저장 2 (최근 본 상품(페이지) 기록하기)공부/React 2024. 2. 22. 01:12
과제 출처 : 코딩애플
1. 목표
- 메인페이지에 있는 상품의 상세페이지로 이동하는 경우 해당 상품의 id값을 localStorage에 저장한다.
- 중복된 값이 있는 경우 제거한다.
2. 코드
App.js
<Route path='/detail/:id' element={<Context1.Provider value={{재고, shoes}}><Detail className={'start'} shoes={shoes}/></Context1.Provider>}/>
- 기존에 detail에 전달되는 shoes 데이터를 이용해서 detail.js에서 id값을 조회하여 localstorage에 데이터를 저장한다.
Detail.js
function Detail(props) { //url로 가져온 id값 let {id} = useParams(); //find 함수로 url로 가져온 id값과 일치하는 id값을 찾는다. let find_product = props.shoes.find(x => x.id == id); //Detail 페이지가 한번 로드 될때 한번 씩 실행 useEffect(()=>{ // if문을 통해 localStorage의 데이터가 빈값이 아니면 배열을 복사해 // 현재 id값을 추가하여 덮어씌우는 형태로 구현 // 그게 아니라면 지금 현재 값으로 localStorage에 바로 데이터 추가 if( JSON.parse(localStorage.getItem('product_num')) != '[]') { let product_num = JSON.parse(localStorage.getItem('product_num')) product_num.push(find_product.id); const new_ptnum = Array.from(new Set(product_num)); localStorage.setItem('product_num', JSON.stringify(new_ptnum)) } else { let product_num = []; product_num.push(find_product.id); localStorage.setItem('product_num', JSON.stringify(product_num)) } }, []) return ( ) }
- const new_ptnum = Array.from(new Set(product_num))를 통해 기존 데이터를 추가할 때 중복되는 데이터
는 Set함수를 통해 중복되는 값을 제거하여 Array형식으로 출력하게 하게 만들었다.
이상하게 혼자 문제를 잘 풀었는데도.. 자꾸 데이터가 초기화되는 문제가 있었는데
30분동안 애꿎은 코드만 손 보다가 App.js에 로컬스토리지를 테스트하면서
빈배열을 추가하는 코드를 적어놓고 까먹고 있었다.. 😂..
'공부 > React' 카테고리의 다른 글
[React] memo, useMemo 란? (1) 2024.02.25 [React] React.lazy 란? (1) 2024.02.25 [React] 자식 컴포넌트에서 부모 컴포넌트로 데이터 전달하기 (0) 2024.02.22 [React] localStorage 브라우저 데이터 저장 (0) 2024.02.20 [React] Redux 문제 1. object 데이터를 버튼 클릭 시 1씩 증가하기 (0) 2024.02.20