728x90
ProductDetails [/goods/:category/:id]
프로젝트 구현이 어느정도 되기 시작하면서 ,
로그인을 맡은 친구가 로그인에 성공하면 해당 유저의 데이터를 객체형식으로 세션스토리지로 보내줬다.
그 세션스토리지의 여부로 인하여 로그인상태인지 판별할 수 있었고,
또는 세션스토리지 정보를 바탕으로 세션스토리지의 값을 변경하기 위한 첫 연습이였다.
url의 category와 id 로 해당 상품을 찾아낼 수 있었다.
const { category, id } = useParams(); // 아이템을 찾기위한 url 소스
const selectedProduct = GoodsItems.find((item) => item.category === category && item.id === parseInt(id));
세션 스토리지에서 해당 유저의 정보를 얻어온다.
//세션 스토리지의 유저 데이터를 담는 변수.
const userData = JSON.parse(sessionStorage.getItem('LoginUserInfo'));
우리는 해당 유저의 속성중에
isLike: [1, 2, 3],
이런식으로 해당하는 상품 id 값을 넣어두었다.
그 값이 현재 상품 id 와 일치한다면 , like 상태를 업데이트 해주었다.
// 컴포넌트가 마운트될 때 세션 스토리지에서 찜하기 상태 초기화
useEffect(() => {
const userData = JSON.parse(sessionStorage.getItem('LoginUserInfo'));
if (userData && userData.mypage.isLike.includes(selectedProduct.id)) {
setLike(true); // 찜 목록에 있으면 like 상태를 true로 설정
}
}, [selectedProduct.id]);
이미지에 onClick 이벤트를 걸어두고 ,
클릭할때마다 이미지를 바꿔줄건데,
로그인이 되었다면 값을 바꿔줘야하고
로그인이 되지 않았다면 로그인 화면으로 이동되게 구현해야한다.
// 세션 스토리지의 사용자 정보 업데이트
if (userData) {
const updatedLikes =
like
? userData.mypage.isLike.filter(id => id !== selectedProduct.id) // 이미 찜한 상태라면 제거
: [...userData.mypage.isLike, selectedProduct.id]; // 찜하지 않은 상태라면 추가
const updatedUser = {
...userData,
mypage: {
...userData.mypage,
isLike: updatedLikes
}
};
// 업데이트된 사용자 정보를 세션 스토리지에 저장
sessionStorage.setItem('LoginUserInfo', JSON.stringify(updatedUser));
} else {
setIsLoginModalOpen(true);
return;
}//user데이터가 없을경우 찜목록 사용 비활성화
로그인에서 찜이 되어 있는 상황
한번 더 클릭해서 지우면 세션까지 데이터 지워진것을 확인 가능하다.
로그인이 되지 않았다면 ,
이후 form에서도 대환장 파티가 시작된다.
'Developer > PROJECT.React' 카테고리의 다른 글
리액트 프로젝트 6. 구매 금액수량변경 , 장바구니 불러오기 (0) | 2024.07.02 |
---|---|
리액트 프로젝트 5. 제품 상세페이지 form 금액 랜더링 , 장바구니 기능 구현 (0) | 2024.07.02 |
리액트 프로젝트 3. 상품 리스트 , 페이지 네이션 (0) | 2024.07.01 |
리액트 프로젝트 2. 상품 리스트 , 검색과 카테고리 분류 (0) | 2024.07.01 |
리액트 프로젝트 1. 시작 , 페이징처리와 연산자의 사랑 (0) | 2024.06.30 |