본문 바로가기
개발/React

리액트에서 카카오 맵 api 사용하는 법

by 안뇽! 2021. 11. 19.
반응형

 

아래 과정은 당연히 진행했다고 생각하고 그 다음을 이야기하겠다.

 

1. index.html에 라이브러리 추가.

 

1. 리액트의 public폴더안의 index.html에 들어간다.

2.  헤더 안에 카카오 공식문서에서 소개하는 태그를 삽입한다.

 

 <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
.
.
.
    
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=%REACT_APP_KAKAO_API%&libraries=services,clusterer,drawing"></script>
    <title>React App</title>
  </head>

API_KEY 는 .env안에 있는 데이터를 사용한다.

 

리액트안에서 사용하는 .env데이터는 꼭 REACT_APP_를 붙혀야 한다.

 

 

3. 라이브러리를 추가한다.

 

난 그냥 세개 다 붙혔다.

2.  Sample데이터를 리액트형식에 맞게 작성한다.

이건 내가 사용한 코드이다.

본인이 구현하려는 코드에 맞게 샘플에 있는 JS,HTML 코드를 변형하여 작성한다.

import React, { useEffect } from 'react';
import { useSelector,shallowEqual } from 'react-redux';


const MapPick = ({meeting_place}) => {
    const {lat,lon} = useSelector((state=>state.locationReducer),shallowEqual)
    const { kakao } = window;
  
    
    useEffect(() => {
        const container = document.querySelector('.kakao-map');
        const options = {
            center: new kakao.maps.LatLng(lat, lon),
            level: 3
        };
        const map = new kakao.maps.Map(container, options);
        var geocoder = new kakao.maps.services.Geocoder();
        geocoder.addressSearch(meeting_place, function(result, status) {

            // 정상적으로 검색이 완료됐으면 
             if (status === kakao.maps.services.Status.OK) {
        
                var coords = new kakao.maps.LatLng(result[0].y, result[0].x);
        
                // 결과값으로 받은 위치를 마커로 표시합니다
                var marker = new kakao.maps.Marker({
                    map: map,
                    position: coords
                });
        
                // 인포윈도우로 장소에 대한 설명을 표시합니다
                var infowindow = new kakao.maps.InfoWindow({
                    content: '<div style="width:150px;text-align:center;padding:6px 0;">'+meeting_place+'</div>'
                });
                infowindow.open(map, marker);
        
                // 지도의 중심을 결과값으로 받은 위치로 이동시킵니다
                map.setCenter(coords);
            } 
        });    
        //위도, 경도로 변환 및 마커표시
        // let markerPosition  = new kakao.maps.LatLng(lat, lon); 
        // let marker = new kakao.maps.Marker({
        //     position: markerPosition
        // });
        // marker.setMap(map);

    }, [meeting_place]);
    return (
        <div className='kakao-map'></div>
    );
}

export default MapPick;

 

반응형