쓴 라이브러리 : reack-kakao-maps-sdk
https://react-kakao-maps-sdk.jaeseokim.dev/
<script
type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 APP KEY를 넣으시면 됩니다.&libraries=services,clusterer"
></script>
window에 kakao라는 변수 인식을 위한 추가
/// <reference types="vite/client" />
declare global {
interface Window {
kakao: typeof kakao;
}
}
export {}; // 모듈로 인식되도록 함
kakao 내의 maps 정의
//////////vite-env.d.ts
/// <reference types="vite/client" />
//아래 코드 추가하기
declare global {
interface Window {
kakao: {
maps: {
load: (callback: () => void) => void;
Map: any; // 다른 필요한 타입들도 여기에 추가
};
};
}
}
export {};
src/types 폴더를 만들어서 추가
kakao에서 사용할 좌표와 map class를 정의
declare namespace kakao.maps {
class LatLng {
constructor(lat: number, lng: number);
}
class Map {
constructor(container: HTMLElement, options: MapOptions);
setCenter(latlng: LatLng): void;
// 추가 메서드 및 속성 정의
}
interface MapOptions {
center: LatLng;
level: number;
// 필요한 다른 옵션 속성들을 여기에 정의합니다.
}
// 추가적으로 필요한 Kakao Maps API 클래스와 인터페이스 정의
}
src/types 내의 문서들을 설정할 수 있게 함
"typeRoots": ["./node_modules/@types", "./src/types"],
...
"include": ["src/**/*.ts", "src/**/*.tsx", "src/types"],
import { useEffect, useState } from "react";
import { Map, MapMarker } from "react-kakao-maps-sdk";
import TheHeader from "@components/common/TheHeader";
import TheFooter from "@components/common/TheFooter";
const UserMap = () => {
const [currentPosition, setCurrentPosition] = useState({
lat: 37.566826,
lng: 126.9786567,
});
// 사용자의 현재 위치를 가져오는 함수
useEffect(() => {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
setCurrentPosition({
lat: position.coords.latitude,
lng: position.coords.longitude,
});
},
(error) => {
console.error("Error occurred while fetching location:", error);
},
);
} else {
console.error("Geolocation is not supported by this browser.");
}
}, []);
return (
<>
<TheHeader />
<div className="w-full h-screen">
<Map
center={currentPosition}
className="w-full h-full"
level={3}
>
<MapMarker position={currentPosition}>
<div style={{ color: "#000" }}>현재 위치</div>
</MapMarker>
</Map>
</div>
<TheFooter />
</>
);
};
export default UserMap;
여기서 발생한 이슈
<script
type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=%VITE_JAVASCRIPT_API_KEY%&libraries=services&autoload=false"
></script>
VITE 프로젝트로 하고 있다면 꼭 환경변수명은 VITE_를 붙여줘야 한다.
VITE_JAVASCRIPT_API_KEY = ${자바스크립트 키}
여기서 발생한 이슈