리액트에서 구글맵 연동하기
Written on July 5, 2019
기본적인 Google Maps API는 서버에서의 요청을 기본으로 하므로, 리액트를 활용하 client-side에서 요청을 보내기 위해서는 Maps JavaScript API를 사용해야 한다.
공식문서에 따르면, index.html 파일 <head>
에 아래의 스크립트를 추가해 주는 것으로 전체 앱에서 Maps JavaScript API에서 제공하는 함수를 사용할 수 있게된다.
<head>
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
</head>
하지만 index.html에 직접적으로 스크립트를 작성하지 않고, js 파일에서 script를 동적으로 추가하는 방법으로 진행해 보겠다.
// Map.js
import React, { Component } from "react";
import { render } from "react-dom";
class Map extends Component {
constructor(props) {
super(props);
this.onScriptLoad = this.onScriptLoad.bind(this);
}
onScriptLoad() {
const map = new window.google.maps.Map(
document.getElementById(this.props.id),
this.props.options
);
this.props.onMapLoad(map);
}
componentDidMount() {
if (!window.google) {
var s = document.createElement("script");
s.type = "text/javascript";
s.src = `https://maps.google.com/maps/api/js?key=YOUR_API_KEY`;
var x = document.getElementsByTagName("script")[0];
x.parentNode.insertBefore(s, x);
s.addEventListener("load", e => {
this.onScriptLoad();
});
} else {
this.onScriptLoad();
}
}
render() {
return <div id={this.props.id} />;
}
}
export default Map;
Map.js 파일에서 컴포넌트가 최초로 마운트되면, <script>
를 추가하고,
<script>
가 추가되면 Google Map API의 window.google.maps.Map
생성자를 활용하여 props로 받아 온 좌표와 마커로 맵을 그리게 된다.
// App.js
import React, { Component } from 'react';
import Map from './Map';
const App = () => {
render() {
return (
<Map
id="myMap"
options={{
center: { lat: 33.4890, lng: 126.4983 },
zoom: 15
}}
onMapLoad={map => {
var marker = new window.google.maps.Marker({
position: { lat: 33.4890, lng: 126.4983 },,
map: map
});
}}
/>
);
}
}
export default App;
참고자료
👩🏻💻 배우는 것을 즐기는 프론트엔드 개발자 입니다
부족한 블로그에 방문해 주셔서 감사합니다 🙇🏻♀️
in the process of becoming the best version of myself