1. 배송 정보 입력

실습 레포

기능

주문하기 -> 배송지 입력, 결제

화면

주문 페이지 - /order

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

배송지 정보 입력

간단히 받는 사람 이름, 주소, 전화번호를 입력 받는다.

데이터를 다룰 수 있게 'OrderFormStore를' 준비한다.

상세 주소가 아닌 상위 주소 지정시 우편번호를 함께 지정하게 한다.

@singleton()
@Store()
export default class OrderFormStore {
  name = "";

  address1 = "";

  address2 = "";

  postalCode = "";

  phoneNumber = "";

  get valid() {
    return (
      !!this.name.trim() &&
      !!this.address1.trim() &&
      !!this.address2.trim() &&
      !!this.postalCode.trim() &&
      !!this.phoneNumber.trim()
    );
  }

  @Action()
  changeName(name: string) {
    this.name = name;
  }

  @Action()
  changeAddress1(address1: string, postalCode: string) {
    this.address1 = address1;
    this.postalCode = postalCode;
  }

  @Action()
  changeAddress2(address2: string) {
    this.address2 = address2;
  }

  @Action()
  changePhoneNumber(phoneNumber: string) {
    this.phoneNumber = phoneNumber.replace(/[^0-9]/g, "");
  } // 전화번호는 number 가 아닌 데이터는 입력받지 않는다.
}

ShippingForm

데이터를 입력받는 ShippingForm에 주소 부분,.

보통 쇼핑몰에서 볼 수 있듯, 상위 주소를 readonly 처리 하는 부분이 있다.

말 그대로 readonly 하고싶기 때문.

아래처럼 TextBox 컴포넌트를 수정해준다.

우편 번호 검색

  • 우편 번호 검색 기능을 사용하는 이유

  1. 주소는 외우지만 우편번호 외우는 사람이 적다.

  2. 더 중요한 건, 표준화된 주소를 얻기 위해서이다.

  3. 건물명으로 주소 찾기도 쉽고 좌우지간 사용자에게 편하다.

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

다음 문서에서 가져온 스크립트 코드는 기본적인 자바스크립트기 때문에

src/components/new-order/daum.postfode.d.ts 파일 생성해 타입 잡아준다.

전역으로 얻는 daum 객체의 타입을 알 수 있게 된다.

AddressSearch.tsx

kakao 우편번호 서비스 문서를 보면 역시 자바스크립트로 되어있다.

직접 DOM에 접근하게 되어있고, react에서는 ref를 사용해 직접 DOM에 접근할 수 있다.

컴포넌트랑 영원히 같이가는 상수같이 사용하거나

상태처럼 값이 변할때 리렌더링이 되지 않도록 한다.

여기까지 하면 order 페이지에서 바로 주소찾기 모달이 떠있다.

boolean으로 열고 닫고 처리를 해줘야한다.

useBoolean

usehooks-ts 의 useBoolean을 이용해 쉽게 구현할 수 있다.

외부 솔루션을 이용해 우편번호 찾기 기능을 쉽게 추가했다.

test

테스트 마지막에 I.wait(긴 시간) 줘서

테스트 이후 디버깅이 가능하도록 하는 꿀팁.

마지막이 아니더라도 특정 화면에서 멈추도록도 가능하다.

Last updated