프로젝트/BookStore 사이트
1128 도서 상세 페이지 구현
thinktank911
2025. 11. 28. 12:42
도서 상세 페이지
pages에서 BookDetail 생성
App.tsx에서 라우터 생성
BookItem 링크 생성
BookDetail에서 bookId 얻기
- useParams(); 사용
fetch 함수와 useBook 훅 생성
- books.spi.ts
- hooks>useBook.tsx
BookDetail에서 useBook 함수로 book 정보 가져오기
※ 얼리 리턴 : book이 만약 없을 경우 null 리턴
BookDetail 내용 뿌리기
- dl, dt 정의 태그
- 키, 배열 구조화
- 구조화된 것 map
- price 포맷화. filter 키 추가 : formatNumber 사용
- date 포맷화 : formatDate 사용
- dayjs 모듈 활용 : npm i dayjs
- 카테고리 링크 적용
- summary, 좋아요, 장바구니 위치 잡기
상세 설명 더보기 토글 버튼 구현
방법1)
.content {
/*글자수가 많은 경우 가리기 가능*/
.detail {
height: 200px;
overflow: hidden;
}
}
방법2)
.content {
.detail {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 4; /* 4줄까지 보여준다 */
-webkit-box-orient: vertical /* 방향 */
}
}
공통 컴포넌트로 빼서 구현
- styled-component에 boolean 선언 x : $ 붙여서 해결
좋아요 구현
button컴포넌트 styled 직접 구현
function LikeButton({ book, onClick }: Props) {
return (
<LikeButtonStyle size="small" scheme="normal" onClick={onClick}>
<FaHeart />
{book.likes}
</LikeButtonStyle>
);
}
const LikeButtonStyle = styled(Button)``;
export default LikeButton;
토글버튼 기능 구현
- useBook.ts
- books.api.ts에서 fetch 함수 선언
※ 낙관적 업데이트란?
2025.11.28 - [프레임워크\라이브러리/React] - [React Query] 낙관적 업데이트
[React Query] 낙관적 업데이트
낙관적 업데이트란?낙관적 업데이트는 서버가 성공할 거라고 믿고 UI를 먼저 바꾼 뒤, 실패하면 되돌리는 기술이다. 예시(좋아요 버튼)const [like, setLike] = useState(0);const handleLike = async () => { const pre
thinktank911.tistory.com
로그인 하지 않았을 때 좋아요 처리
- useAuthStore에서 로그인 상태 가져오고 if 처리
const { isloggedIn }= useAuthStore();
const showAlert = useAlert();
// 좋아요 토글 버튼
const likeToggle = () => {
// 권한 확인
if(!isloggedIn){
showAlert("로그인이 필요합니다.");
return;
}
장바구니 구현
AddToCart.tsx 생성
- 수량 증감 버튼 만들기
장바구니 fetcher 생성
장바구니 이동 박스 만들기
addToCart useBook 으로 이동