๋ฆฌ์กํธ์์ Google Maps API(๊ตฌ๊ธ๋งต API) ์ฌ์ฉํ๊ธฐ(+ ์ปค์คํ ๋ง์ปค)
๊ฐ์ธ ํ๋ก์ ํธ ์๋๋ ์ฆ ๊ฐ๋ฐ ์ค, Home ํ๋ฉด์ ๊ตฌ๊ธ๋งต API๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค.
1. Google Maps API(๊ตฌ๊ธ๋งต API) ์ถ๊ฐ
2. ๊ฐ๋ ์ฌํ์ง์ ์์ ์ถ๊ฐ
1. API ํค๊ฐ ๋ฐ๊ธ๋ฐ์ <script>์ ๋ฃ๊ธฐ
2. ๊ณต์ ๋ฌธ์์ ์๋ ์ฝ๋ React hooks๋ก ์์ ํ๊ธฐ
<script
src="https://maps.googleapis.com/maps/api/js?key=%VITE_MAP_API_KEY%&loading=async&libraries=marker"
async
></script>
index.html์ ์๋ script์ API์ key๊ฐ์ ์
๋ ฅํ๋ค. key๊ฐ์ ๊นํ๋ธ์ ์ฌ๋ ธ์ ๋ ๋
ธ์ถ๋์ง ์๊ธฐ ์ํด .envํ์ผ์ ๋ฃ์๊ธฐ์ ๋ณ์๋ช
์ ์ฌ์ฉํ๋ค.
์ด๋ฐ๋ถ์ ๋นํฉํ์ง๋ง, ์ด๋ฏธ ๋ค๋ฅธ ๋ถ๋ค์ด ์์ฑํ ์ฝ๋์ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋ง๊ฒ ์์ ํ ์ ์๋ค.
import { useCallback, useEffect, useRef } from "react";
const locations = [
{ title: "vancouver", position: { lat: 49.2576182, lng: -123.2887105 } },
{ title: "vietnam", position: { lat: 14.073694, lng: 108.413399 } },
{ title: "mongolia", position: { lat: 47.0008262, lng: 103.0839711 } },
];
function Home() {
const mapRef = useRef(null);
const initMap = useCallback(() => {
const map = new window.google.maps.Map(mapRef.current, {
center: { lat: 40.397, lng: 150.644 },
zoom: 2,
mapId: "DEMO_MAP_ID",
});
const mapPin = "/mapPin.svg";
locations.forEach((location) => {
new window.google.maps.Marker({
// new window.google.maps.marker.AdvancedMarkerElement({
map,
position: location.position,
title: location.title,
icon: mapPin,
});
});
}, [mapRef]);
useEffect(() => {
initMap();
}, [initMap]);
return (
<div
className="map"
style={{ width: "100vw", height: "600px" }}
ref={mapRef}
></div>
);
}
export default Home;
์ขํ๊ฐ์ผ๋ก ์ฐ์ด์ค ์๋์ ๊ฒฝ๋๋ ๊ตฌ๊ธ๋งต์์ ์ฐพ์๋ค.
useRef๋ฅผ ์์ ์ ๋ฐฐ์ ๋๋ฐ, ์์ด๋ฒ๋ ธ๋ค. ๊ทผ๋ฐ ์ด๋ฒ์ map์ ๋ถ๋ฌ์ฌ ๋ ์ฌ์ฉํด์ ๋ค์ ํ๋ฒ ๊ณต๋ถํ๋ค.
useRef๋ React์ Hookํจ์๋ก ํน์ DOM์ ์ ํํด์ผ ํ๋ ์ํฉ์ ์ฌ์ฉํ๋ค. ๋ณดํต Javascript๋ฅผ ์ฌ์ฉํ ๋ getElementById ๋๋ querySelector๊ฐ์ Dom selector๋ฅผ ์ฌ์ฉํด ์ ํํ๋ค.
input์ ํฌ์ปค์ค๊ฐ ์กํ๋๋ก ํ ๋ useRef๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค.
์์ ์ฝ๋์์ mapRef๋ ๊ตฌ๊ธ ์ง๋๊ฐ ๋ ๋๋ง๋ DOM์์๋ฅผ ์ฐธ์กฐํ๋ค.
๊ฐ์ | Maps JavaScript API | Google for Developers
Google Maps JavaScript API๋ฅผ ์์ํฉ๋๋ค. ๊ฐ๋จํ ์๋ฅผ ํ์ธํ๊ณ , ๊ฐ๋ ์ ์์๋ณด๊ณ , ์ฌ์ดํธ์ ๋ง๋ ๋ง์ถค ์ง๋๋ฅผ ๋ง๋ค์ด ๋ณด์ธ์.
developers.google.com
https://react.vlpt.us/basic/10-useRef.html
10. useRef ๋ก ํน์ DOM ์ ํํ๊ธฐ · GitBook
10. useRef ๋ก ํน์ DOM ์ ํํ๊ธฐ JavaScript ๋ฅผ ์ฌ์ฉ ํ ๋์๋, ์ฐ๋ฆฌ๊ฐ ํน์ DOM ์ ์ ํํด์ผ ํ๋ ์ํฉ์ getElementById, querySelector ๊ฐ์ DOM Selector ํจ์๋ฅผ ์ฌ์ฉํด์ DOM ์ ์ ํํฉ๋๋ค. ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋
react.vlpt.us
๊ณต์๋ฌธ์๋ฅผ ๊ผผ๊ผผํ๊ฒ ์ฝ๋ ๊ฒ์ ์ค์์ฑ์ ๊นจ๋ฌ์๋ค. ๋ ํ๋ฒ ์ง๋ ๋์ฐ๋๊ฒ์ ์ฑ๊ณตํ๋ ๋ค๋ฅธ ๊ฒ๋ ์ฒ์ฒํ ์ ๊ทผํ๋ฉด ์ ํ ์ ์์ ๊ฒ ๊ฐ๋ค!
classnames ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ class ์ถ๊ฐํ๊ธฐ (1) | 2024.06.14 |
---|---|
๋ถ๋๋ฌ์ด ์ ์ฒด ์คํฌ๋กค ์ค์น(Lenis) (0) | 2024.06.04 |
[0418] ํด๋ ์์ , useEffect ๋จ์ฉ ์๊ธฐ (0) | 2024.04.18 |
0413 React-query ๊ณต๋ถ (0) | 2024.04.13 |
[React] Todo List ๋ง๋ค๊ธฐ(CRUD ๊ธฐ๋ณธ ๊ฐ๋ ) (0) | 2024.03.23 |