728x90

공식 문서에는 순수 JavaScript를 이용한 API 적용 방식만 기재되어 있기에, React Hooks 환경으로 코드를 변형하기 힘들어 하시고 있는 분들에게 도움이 되었으면 좋겠습니다❗️

 

 

 

 

 

 

1. Kakao 지도 Javscript API 키 발급 받기

 

developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

위 주소로 접속, 로그인 후  내 애플리케이션을 클릭합니다.

 

 

 

그러면 위의 첨부사진에 있는 "애플리케이션 추가하기"를 선택

 

 

 

 

 

앱 이름과 사명자명을 기재해야하는데, 추후 수정도 되는 부분이니 적당하게 기입해주세요.

 

 

 

 

 

 

 

 

"앱 설정 > 요약 정보"에 JavaScript 키에 키를 복사하시면 키 발급은 끝입니다!

 

 

2. 코드에 적용해서 맵 띄우기

 

이제 본격적으로 공식 문서의 순수 Javascript 절차와 비교하면서 코드를 작성하여 맵을 띄우는 작업을 해보겠습니다!

 

(1) 지도를 나타낼 div 생성

 

📌 JavaScript

 

📌 React Hooks

<div
      className="map"
      style={{ width: "500px", height: "500px" }}
    ></div>

 

 

 

 

(2) Kakao 지도 API 불러오기

 

처음에 발급 받았던 키를 불러와주는 작업입니다.

코드 내에 설명대로 키를 꼭 바꿔서 넣어주세요❗️

 

📌 JavaScript

 

 

 

📌 React Hooks

 

<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 APP KEY를 넣으시면 됩니다."></script>

index.html 안의 header 에 스크립트 코드를 넣어줍니다.

 

 

 

 

 

 

 

 

 

(3) 지도 띄우는 코드 작성

 

 

📌 JavaScript

 

 

 

📌 React Hooks

 

import React, { useRef, useEffect } from "react";

const options = {
  //지도를 생성할 때 필요한 기본 옵션
  center: new window.kakao.maps.LatLng(33.450701, 126.570667), //지도의 중심좌표.
  level: 3, //지도의 레벨(확대, 축소 정도)
};

function Home() {
  const container = useRef(null); //지도를 담을 영역의 DOM 레퍼런스

  useEffect(() => {
    new window.kakao.maps.Map(container.current, options); //지도 생성 및 객체 리턴
    return () => {};
  }, []);

  return (
    <div
      className="map"
      style={{ width: "500px", height: "500px" }}
      ref={container}
    ></div>
  );
}

export default Home;

 

JavaScript와 비교해보자면,

1. getElementById로 요소를 불러오는 부분은 useRef를 사용

2. kakao 객체 앞에 window. 추가(kakao 객체 사용하는 모든 코드에 적용)

3. 맵을 띄우기 위해서 useEffect 사용(container.current 로 수정)

4. 맵을 띄우는 div에 ref 적용

 

 

여기까지 작성하시면 정상적으로 실행하실 수 있습니다!

 

 

이후 추가적인 구현을 위한 정보는 카카오맵 API 공식 문서에서 얻으실 수 있습니다!

apis.map.kakao.com/web/

 

728x90
복사했습니다!