<script
type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=발급받은 APP KEY를 넣으시면 됩니다.&libraries=services,clusterer"
></script>
https://github.com/JaeSeoKim/kakao.maps.d.ts kakao Map d.ts
TS에 필요한 d.ts가 정의된 패키지 설치
npm install kakao.maps.d.ts --save-dev
tsconfig.json
의 compilerOptions.types
속성에 kakao.maps.d.ts
패키지 추가
"compilerOptions": {
...
"types": ["kakao.maps.d.ts"]
},
npm install react-kakao-maps-sdk
# or
yarn add react-kakao-maps-sdk
import { Map } from "react-kakao-maps-sdk";
const InitMap = (): JSX.Element => {
return (
<Map
center={{ lat: 37.4882, lng: 127.0648 }}
style={{ width: "100%", height: "360px" }}
/>
);
};
export default InitMap;
import { Map, MapMarker } from "react-kakao-maps-sdk";
const Marker = (): JSX.Element => {
return (
<Map
center={{ lat: 37.4882, lng: 127.0648 }}
style={{ width: "100%", height: "360px" }}
>
<MapMarker position={{ lat: 37.4882, lng: 127.0648 }} />;
</Map>
);
};
export default Marker;
import { Map, MapMarker } from "react-kakao-maps-sdk";
import { useState, useEffect } from "react";
const GeolocationMap = (): JSX.Element => {
const [state, setState] = useState({
center: {
lat: 37.4882,
lng: 127.0648,
},
errMsg: null,
isLoading: true,
});
useEffect(() => {
if (navigator.geolocation) {
// GeoLocation을 이용해서 접속 위치를 얻어옵니다
navigator.geolocation.getCurrentPosition(
(position) => {
setState((prev) => ({
...prev,
center: {
lat: position.coords.latitude, // 위도
lng: position.coords.longitude, // 경도
},
isLoading: false,
}));
},
(err) => {
// setState((prev) => ({
// ...prev,
// errMsg: err.message,
// isLoading: false,
// }));
}
);
} else {
// HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
// setState((prev) => ({
// ...prev,
// errMsg: "geolocation을 사용할수 없어요..",
// isLoading: false,
// }));
}
}, []);
return (
<Map // 지도를 표시할 Container
center={state.center}
style={{
// 지도의 크기
width: "100%",
height: "450px",
}}
level={3} // 지도의 확대 레벨
>
{!state.isLoading && (
<MapMarker position={state.center}>
<div style={{ padding: "5px", color: "#000" }}>
{state.errMsg ? state.errMsg : "여기에 계신가요?!"}
</div>
</MapMarker>
)}
</Map>
);
};
export default GeolocationMap;