๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

[React] ์นด์นด์˜ค์ง€๋„API ์‚ฌ์šฉํ•˜๊ธฐ (2023.06.05) ๋ณธ๋ฌธ

full stack/React

[React] ์นด์นด์˜ค์ง€๋„API ์‚ฌ์šฉํ•˜๊ธฐ (2023.06.05)

Shinjio 2023. 6. 5. 14:42

 

React์—์„œ ์นด์นด์˜ค์ง€๋„ API ์‚ฌ์šฉํ•˜๊ธฐ

 

๐ŸŽˆ OPEN API  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

 

 

๐ŸŽˆ key ๋ฐœ๊ธ‰๋ฐ›๊ธฐ

 

1. ๋กœ๊ทธ์ธ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถ”๊ฐ€

 

React๋Š” JavaScript ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ JavaScript ์ฝ”๋“œ ์‚ฌ์šฉํ•  ์˜ˆ์ •

 

 

2. web ํ”Œ๋žซํผ ๋“ฑ๋กํ•˜๊ธฐ

 

 

 

 

๋งŒ์•ฝ jsp/servlet์—์„œ๋„ ์‚ฌ์šฉํ• ๊ฑฐ๋ผ๋ฉด ํ•ด๋‹น ์ฃผ์†Œ๋„ ์ถ”๊ฐ€(ex. 8080)ํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

 

3. react-kako-maps-sdk ๋กœ ๋ฆฌ์•กํŠธ์—์„œ kakao map ์‚ฌ์šฉํ•˜๊ธฐ

 

 

typeScript ์ž๋ฃŒํ˜• ์ง€์ •ํ•ด์ฃผ๋Š” script >> ์ตœ๊ทผ ๋œจ๋Š” ์ค‘ 

 

3.1. index.html headํƒœ๊ทธ์— api ์ž…๋ ฅ

 

    <script
  type="text/javascript"
  src="//dapi.kakao.com/v2/maps/sdk.js?appkey=๋ณธ์ธkey&libraries=services,clusterer"
></script>

 

3.2. react-kakao-maps-sdk ์„ค์น˜

 

 

3.3. App.js ์ž‘์„ฑ

 

MapMarker, Map > import ํ•ด์ค˜์•ผ ํ•จ!

import "./App.css";
import { MapMarker, Map } from "react-kakao-maps-sdk";

function App() {
  return (
    <div>
      <Map
        center={{ lat: 33.5563, lng: 126.79581 }}
        style={{ width: "100%", height: "360px" }}
      >
        <MapMarker position={{ lat: 33.55635, lng: 126.795841 }}>
          <div style={{ color: "#000" }}>Hello World!</div>
        </MapMarker>
      </Map>
    </div>
  );
}

export default App;

 

 

๐ŸŽˆ ์—ฌ๋Ÿฌ๊ฐœ ๋งˆ์ปค์— ์ด๋ฒคํŠธ ๋“ฑ๋กํ•˜๊ธฐ1 ํ™œ์šฉํ•ด๋ณด๊ธฐ


index.html

    <script
      type="text/javascript"c
      src="//dapi.kakao.com/v2/maps/sdk.js?appkey=e77e282f01b0b2718596e16811e7e6af&libraries=services,clusterer"
    ></script>

 

import React from "react";
import { useMap, MapMarker, Map } from "react-kakao-maps-sdk";
import { useState } from "react";

const App2 = () => {
  //์ง€๋„ ์ค‘์‹ฌ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ผ states
  const [centerLat, setCenterLat] = useState(33.450701);
  const [centerLon, setCenterLon] = useState(126.570667);
  const [level, setLevel] = useState(3);
  const [data, setData] = useState([
    {
      content: <div style={{ color: "#000" }}>์นด์นด์˜ค</div>,
      latlng: { lat: 33.450705, lng: 126.570677 },
    },
    {
      content: <div style={{ color: "#000" }}>์ƒํƒœ์—ฐ๋ชป</div>,
      latlng: { lat: 33.450936, lng: 126.569477 },
    },
    {
      content: <div style={{ color: "#000" }}>ํ…ƒ๋ฐญ</div>,
      latlng: { lat: 33.450879, lng: 126.56994 },
    },
    {
      content: <div style={{ color: "#000" }}>๊ทผ๋ฆฐ๊ณต์›</div>,
      latlng: { lat: 33.451393, lng: 126.570738 },
    },
  ]);

  const EventMarkerContainer = ({ position, content }) => {
    const map = useMap();
    const [isVisible, setIsVisible] = useState(false);

    return (
      <MapMarker
        position={position} // ๋งˆ์ปค๋ฅผ ํ‘œ์‹œํ•  ์œ„์น˜
        // @ts-ignore
        onClick={(marker) => map.panTo(marker.getPosition())}
        onMouseOver={() => setIsVisible(true)}
        onMouseOut={() => setIsVisible(false)}
      >
        {isVisible && content}
      </MapMarker>
    );
  };

  const smhrdMarker = () => {
    console.log("smhrdMarker");
    setCenterLat(35.149896);
    setCenterLon(126.9197772);
    setData([
      {
        content: <div style={{ color: "#000" }}>๋ณธ์ </div>,
        latlng: { lat: 35.149896, lng: 126.9197772 },
      },
      {
        content: <div style={{ color: "#000" }}>๋‚จ๊ตฌ์ </div>,
        latlng: { lat: 35.110479, lng: 126.877456 },
      },
    ]);

    setLevel(8);
  };

  return (
    <div>
      <Map // ์ง€๋„๋ฅผ ํ‘œ์‹œํ•  Container
        center={{
          // ์ง€๋„์˜ ์ค‘์‹ฌ์ขŒํ‘œ
          lat: centerLat,
          lng: centerLon,
        }}
        style={{
          // ์ง€๋„์˜ ํฌ๊ธฐ
          width: "100%",
          height: "450px",
        }}
        level={level} // ์ง€๋„์˜ ํ™•๋Œ€ ๋ ˆ๋ฒจ
      >
        {data.map((value) => (
          <EventMarkerContainer
            key={`EventMarkerContainer-${value.latlng.lat}-${value.latlng.lng}`}
            position={value.latlng}
            content={value.content}
          />
        ))}
      </Map>

      <button onClick={smhrdMarker}>์Šค๋งˆํŠธ์ธ์žฌ๊ฐœ๋ฐœ์›</button>
    </div>
  );
};

export default App2;

 

 

React ํ”„๋กœ์ ํŠธ git-hub ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

 

npm install ํ›„์— start ํ•ด์ค˜์•ผ ํ•จ!

(๋น„์ถ”) npm install --force 
(๋น„์ถ”) npm update