1. 배송 정보 입력

1. 기능

🎯 어떤 순서로 기능을 만들 것인지는 비즈니스 우선 순위에 따라 결정

  1. 상품 목록 확인 ✅

  2. 상품 상세 정보 확인 ✅

  3. 장바구니에 상품 담기 ✅

  4. 로그인 ✅

  5. 로그아웃 ✅

  6. 회원 가입 ✅

  7. 주문 목록 확인 ✅

  8. 주문 상세 확인 ✅

  9. 주문하기 → 배송지 입력, 결제

2. 화면

  1. 홈 페이지 - /

  2. 상품 목록 페이지 - /products

  3. 상품 상세 페이지 - /products/{id}

  4. 장바구니 페이지 - /cart

  5. 로그인 페이지 - /login

  6. 회원 가입 페이지 - /signup

  7. 회원 가입 완료 페이지 - /signup/complete

  8. 주문 목록 페이지 - /orders

  9. 주문 상세 페이지 - /orders/{id}

  10. 주문 완료 페이지 - /order/complete

  11. 주문 페이지 - /order

3. 주문 페이지

🎯 주문 페이지와 주문 완료 페이지를 추가해서 전체 흐름을 만들기

OrderPage 생성

로직 자체는 장바구니와 매우 유사함

OrderForm 컴포넌트 생성

역시 장바구니와 유사

  • 주소에 /order를 강제로 입력해서 들어오는 것은 고려하지 않음

  • 결제는 솔루션을 이용(추후 작업)

OrderCompletePage 생성

SignupCompletePage와 마찬가지로 간단하게 구성

routes에 페이지 추가

CartView에 버튼 추가

장바구니 페이지에서 주문 페이지로 갈 수 있도록 버튼 추가

4. 배송지 정보 입력

🎯 받는 사람 이름, 주소, 전화번호를 입력 받는 폼 구현하기

  • OrderFormStore를 만들어서 관련 정보를 다룰 수 있도록 준비

  • 주소는 크게 두 부분으로 나뉨 - 상위 주소, 상세 주소

  • 상세 주소가 아닌 상위 주소를 지정할 때 우편번호를 함께 지정

OrderFormStore Hook 생성

  • 지번/도로명 주소가 우편번호와 매칭되기 때문에 동시에 사용

  • 전화번호는 숫자만 가져오도록 정규표현식 사용

useOrderFormStore Hook 생성

  • src/hooks

  • Store를 쓸 수 있는 Hook 생성

OrderForm에서 쓸 수 있는 ShippingForm 생성

TextBox에 readOnly 속성 추가

readOnly 속성을 추가하고 onChange를 옵셔널하게 만들기

  • OrderForm.tsxTODO: 배송지 입력<ShippingForm /> 추가

  • type에 tel 추가

5. 우편번호 검색

우편번호 검색 기능

  1. 주소는 외우지만 우편번호는 못 외우는 경우

  2. 정확히 표준화된 주소를 얻을 수 있음 ⭐️

Daum 우편번호 서비스

  • key 발급 필요 없고 그냥 사용하면 됨

  • 매우 편리

  • 여기에서는 ssl 방식으로 처리할 것

index.html 파일에 스크립트 태그 추가

⚠️ script의 순서에 주의할 것 로딩이 먼저 완료될 수 있도록 위에 작성하기

타입 지정

전역으로 얻는 daum 객체의 타입을 알 수 있도록 daum.postcode.d.ts 파일 생성

  • components/new-order

  • 팝업 모달로 사용할 경우 open 으로 바꾸면 됨

AddressSearch 컴포넌트 생성

우편번호 검색 모달(modal)을 보여주는 AddressSearch 컴포넌트 만들기

useRef 훅을 사용하면 DOM 객체에 직접 접근할 수 있음

  • 내용이 바뀌어도 리렌더링 되지 않음

  • API 사용 시 이런 방법으로 구현하면 됨

  • 폼의 바깥 부분을 누르면 close

ShippingForm에서 AddressSearch를 활용하도록 구현

codecept를 이용한 팁

개발할 때 매번 배송 정보 입력 폼을 임의로 작성하는 것이 번거로움 💡 E2E 테스트로 모든 input을 채워넣고 마지막에 wait로 대기 시간을 길게 주면 그동안 페이지에서 개발자 도구를 열어 디버깅 하는 등의 행위를 할 수 있음

🚧 개발이 끝나면 삭제할 것

Last updated