포스트

[항해99 취업 리부트 코스 학습일지] WIL 3일차

항해99 에서 진행하는 취업 리부트 코스 3기를 수강하며 작성하는 TIL 포스트입니다.


프로젝트 WIL Week 4

이번주도 역시나 프로젝트를 진행하면서 새로운 서비스들을 배우느라 진도가 많이 늦어졌다.

React Query

동기적으로 두 쿼리를 실행하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const {
  data: recommendData,
  status: recommendStatus,
  error: recommendError,
} = useQuery<{
  category: string;
  result: ProductSchema[];
}>({
  queryKey: ['products', data?.productCategory, 'recent'],
  queryFn: fetchProductRecommendList,
});

useQueries({
  queries:
    recommendData === undefined
      ? []
      : recommendData.result
          .filter((product) => product.id !== data?.id)
          .map((product) => ({
            queryKey: ['product', product.id],
            queryFn: fetchProductdata,
          })),
});

React 에서 다음 우편번호 API 스크립트를 추가하고 타입 설정하기

다음에서 주소와 우편번호를 검색해주는 API 를 제공하는데, 그 방식이 CDN 방식으로 스크립트를 불러오고 window 객체에 주입된 daum api 객체를 사용하는 방식이라 기존의 npm 패키지와는 다른 방식을 사용해야 했다.

스크립트 추가 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
type MessageObject = {
  message?: string;
  description?: string;
};

type LoadScript = (
  src: string,
  successMessages: MessageObject,
  errorMessages: MessageObject,
) => Promise<void>;

export const loadScript: LoadScript = (src, successMessages, errorMessages) => {
  return new Promise((resolve, reject) => {
    if (document.getElementById('KakaoPostcodeApi')) resolve();
    else {
      const script = document.createElement('script');
      script.id = 'KakaoPostcodeApi';
      script.src = src;
      script.async = true;
      script.onload = () => {
        toast.info(successMessages.message, {
          description: successMessages.description,
        });
        resolve();
      };
      script.onerror = () => {
        toast.error(errorMessages.message, {
          description: errorMessages.description,
        });
        reject(new Error(`Failed to load script ${src}`));
      };
      document.body.appendChild(script);
    }
  });
};

타입 지정 코드(window 타입에 글로벌 타입 추가)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
declare global {
  interface Window {
    daum: IDaum;
  }
}

interface PostcodeConstructor {
  new (options: { oncomplete: (data: DaumPostcodeResult) => void }): IPostcode;
}

interface IPostcode {
  open: () => void;
}

interface IDaum {
  Postcode: PostcodeConstructor;
}

export type DaumPostcodeResult = {
  postcode: string;
  postcode1: string;
  postcode2: string;
  postcodeSeq: string;
  zonecode: string;
  address: string;
  addressEnglish: string;
  addressType: string;
  bcode: string;
  bname: string;
  bnameEnglish: string;
  bname1: string;
  bname1English: string;
  bname2: string;
  bname2English: string;
  sido: string;
  sidoEnglish: string;
  sigungu: string;
  sigunguEnglish: string;
  sigunguCode: string;
  userLanguageType: string;
  query: string;
  buildingName: string;
  buildingCode: string;
  apartment: string;
  jibunAddress: string;
  jibunAddressEnglish: string;
  roadAddress: string;
  roadAddressEnglish: string;
  autoRoadAddress: string;
  autoRoadAddressEnglish: string;
  autoJibunAddress: string;
  autoJibunAddressEnglish: string;
  userSelectedType: string;
  noSelected: string;
  hname: string;
  roadnameCode: string;
  roadname: string;
  roadnameEnglish: string;
};

항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.

항해99 - 온라인 코딩 부트캠프 항해99

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.