TR1LL1ON은 React를 사용하여 객실 상품을 장바구니에 담거나 예약할 수 있고, 리뷰 작성이 가능한 숙박 예약 서비스입니다.
2023.11.20 ~ 2023.12.01
testID: test@test.com
testPW: 12345678
📦src
┣ 📂api
┣ 📂assets
┣ 📂components
┃ ┣ 📂layout
┃ ┣ 📂template
┃ ┃ ┣ 📂account
┃ ┃ ┣ 📂cart
┃ ┃ ┣ 📂main
┃ ┃ ┣ 📂mypage
┃ ┃ ┣ 📂notFound
┃ ┃ ┣ 📂payment
┃ ┃ ┗ 📂products
┃ ┃ ┃ ┣ 📂GuestModal
┣ 📂hooks
┣ 📂interfaces
┣ 📂pages
┃ ┣ 📂cart
┃ ┣ 📂main
┃ ┣ 📂mypage
┃ ┣ 📂payment
┃ ┗ 📂products
┣ 📂router
┣ 📂states
┣ 📂style
┃ ┣ 📂account
┃ ┣ 📂cart
┃ ┣ 📂common
┃ ┣ 📂header
┃ ┣ 📂main
┃ ┣ 📂mypage
┃ ┣ 📂payment
┃ ┣ 📂products
┣ 📂util
┣ 📜App.tsx
┣ 📜constant.ts
┣ 📜constants.ts
┣ 📜index.css
┣ 📜main.tsx
┗ 📜vite-env.d.ts
✔️ 로그인
trillion 로그인 성공
문구와 함께 로그인 모달이 사라집니다.✔️ 회원가입
회원가입 완료!
문구와 함께 로그인 모달로 이동합니다.로그인 사용자 | 비로그인 사용자 |
---|---|
productId
에 해당하는 숙소를 불러오고, 해당 숙소 정보를 보여줍니다.productId
와 accommodationId
를 쿼리스트링으로 함께 전달합니다.disabled
됩니다.결제가 완료되었습니다
문구와 함께 결제 완료 페이지로 이동합니다.로그인 사용자 | 비로그인 사용자 |
---|---|
try-catch, useState, useEffect로 구성된 기존 비동기처리 코드보다 코드량 감소
react-query 적용 전
const fetchData = async (): Promise<void> => { try { const res = await getCarts(); setCartsData(res); } catch (err) { console.log(err); } finally { setIsLoaded(true); } }; useEffect(() => { fetchData(); }, []);
react-query 적용 후
const cartsDataQuery = useQuery({ queryKey: ['CartsData'], queryFn: () => getCarts(), }); if (cartsDataQuery.isLoading) return <div>Loading...</div> if (cartsDataQuery.isSuccess) setCartsData(cartsDataQuery.data); if (cartsDataQuery.isError) console.log(cartsDataQuery.error);
로그인 알림 모달
문제
: 비로그인 사용자가 장바구니 또는 마이페이지, 상품 장바구니에 추가, 예약버튼을 클릭 하면
인증/인가가 필요한 서비스이기 때문에 401 authorization
에러가 발생했다.
해결 과정
: 쿠키에 access token
이 존재한지 여부를 판단하여 비로그인 사용자인지 로그인 사용자인지 판별하도록 구현했다.
만약 비로그인 사용자로 판별되면 페이지가 이동하거나 API가 실행되는 것이 아닌 로그인 알림 모달이 보여지도록 구현했다.
운 좋게 좋은 팀원들을 만나 미니프로젝트 1등을 하게 되었다.😭
앞으로 마지막 파이널 프로젝트만 남았는데 파이널 프로젝트가 진짜 만만치 않아보인다...
뼈를 깎는 노력으로 파이널까지 잘 마무리해야지... 파이팅!👊