React로 위도 경도

지도/로컬 API에 대한 문의게시판입니다.
안녕하세요. 카카오지도 api 지도 샘플을 통해 제작을 하다가 문제가 생겨서 문의 드립니다.ㅠ (https://codesandbox.io/s/gifted-wescoff-77nwu?file=/src/App.js)-여기 링크를 참고 했습니다.
다름이 아니라 저는 지도를 클릭시 지도의 위도 좌표가 나오는데 그걸 다른 파일에서 사용을 하고 싶은데 잘 안됩니다… getLng()와 getLat()를 저장해서 사용도 해봤는데 계속 에러가 나가지고 문의 드립니다. exports와 module.expotrs를 사용해봤는데 계속 변수가 defined되어 있다고 나오고… 그럽니다… 위도 경도 변수들을 다른 파일에서 사용하고 싶습니다… 도와주세요…!
밑에는 KakaoMap.jsx파일이고

/* global kakao */
import { makeStyles } from ‘@material-ui/core/styles’;
import { CompareArrowsOutlined } from ‘@material-ui/icons’;
import React, { useEffect, useState, useRef } from “react”;
function getModalStyle() {
const top = 50;
const left = 50;

return {
top: ${top}%,
left: ${left}%,
transform: translate(-${top}%, -${left}%),
};
}
const useStyles = makeStyles((theme) => ({
root: {
flexGrow: 1,
},
paper: {
padding: theme.spacing(2),
position: ‘absolute’,
backgroundColor: theme.palette.background.paper,
border: ‘2px solid #000’,
boxShadow: theme.shadows[5],
padding: theme.spacing(2, 4, 3),
},
margin: {
margin: theme.spacing(1),
fullWidth: true,
},
}));

export default function KakaoMap(props) {
const { markerPositions, size } = props;
const [kakaoMap, setKakaoMap] = useState(null);
const [, setMarkers] = useState([]);

const container = useRef();

useEffect(() => {
const script = document.createElement(“script”);
script.src =
https://dapi.kakao.com/v2/maps/sdk.js?appkey=*&autoload=false”;
document.head.appendChild(script);

script.onload = () => {
  kakao.maps.load(() => {
    const center = new kakao.maps.LatLng(37.50802, 127.062835);
    const options = {
      center,
      level: 3
    };
    const map = new kakao.maps.Map(container.current, options);
    //setMapCenter(center);
    var marker = new kakao.maps.Marker({
        map: map,
        position: new kakao.maps.LatLng(33.450701, 126.570667)
    });
    kakao.maps.event.addListener(map, 'click', function(mouseEvent) {
        var latlng = mouseEvent.latLng;
        var message = '클릭한 위치의 위도는 ' + latlng.getLat() + ' 이고, ';
            message += '경도는 ' + latlng.getLng() + ' 입니다';
        alert(message);
    });
    setKakaoMap(map);
  });

};

}, [container]);

useEffect(() => {
if (kakaoMap === null) {
return;
}

// save center position
const center = kakaoMap.getCenter();

// change viewport size
const [width, height] = size;
container.current.style.width = `${width}px`;
container.current.style.height = `${height}px`;

// relayout and...
kakaoMap.relayout();
// restore
kakaoMap.setCenter(center);

}, [kakaoMap, size]);

useEffect(() => {
if (kakaoMap === null) {
return;
}

const positions = markerPositions.map(pos => new kakao.maps.LatLng(...pos));

setMarkers(markers => {
  // clear prev markers
  markers.forEach(marker => marker.setMap(null));

  // assign new markers
  return positions.map(
    position => new kakao.maps.Marker({ map: kakaoMap, position })
  );
});

if (positions.length > 0) {
  const bounds = positions.reduce(
    (bounds, latlng) => bounds.extend(latlng),
    new kakao.maps.LatLngBounds()
  );

  kakaoMap.setBounds(bounds);
}

}, [kakaoMap, markerPositions]);

return

;

}

변수를 쓰고 싶은 파일은 UserMain.jsx파일입니다.

import React, { useState } from ‘react’;
import { makeStyles } from ‘@material-ui/core/styles’;
import {Paper,Grid} from ‘@material-ui/core’;
import moment from ‘moment’;
import ‘moment/locale/ko’;

import UserMainRate from ‘…/contents/UserMainRate’;
import UserMainTable from ‘…/contents/UserMainTable’;

const useStyles = makeStyles((theme) => ({
root: {
flexGrow: 1,
},
paper: {
padding: theme.spacing(1),
textAlign: ‘center’,
color: theme.palette.text.secondary,
},
datePaper:{
padding: theme.spacing(1),
textAlign: ‘center’,
fontSize: ‘25px’,
background: “#9fd8ac”,
},
thirdPaper:{
minHeight:420,
padding: theme.spacing(1),
}
}));

export default function UserMain() {
const classes = useStyles();
const today = moment().locale(‘ko’).format(“YYYY년MM월DD일 ddd요일”);
const startDate = moment().locale(‘ko’).day(1).format(“YYYY년MM월DD일 ddd요일”);
const endDate = moment().locale(‘ko’).day(5).format(“YYYY년MM월DD일 ddd요일”);

return (
    <div className={classes.root}>
        <Grid container spacing={2}>
            <Grid item xs={12}>
                <Paper className={classes.datePaper}>
                  오늘 날짜 : {today} 
                  &nbsp; &nbsp; &nbsp;
                  달성 기간 : {startDate} ~ {endDate}
                </Paper>
            </Grid>
            <Grid item xs={12}>
                <Paper className={classes.paper}><UserMainRate/></Paper>
            </Grid>
            <Grid item xs={12}>
                <Paper className={classes.paper,classes.thirdPaper}><UserMainTable/></Paper>
            </Grid>
        </Grid>
    </div>
);

}

클릭한 좌표를 담는 state를 선언해주시고
kakaoMap에서 다른 컴포넌트에 state값을 전달하는 방법이 있습니다.

리액트 문서의 state 끌어오는 방법 참고해주세요.
https://reactjs-kr.firebaseapp.com/docs/lifting-state-up.html

API 관련 내용과는 무관한 문의로 자세한 답변 드리기 어려운점 양해 부탁드립니다.

1개의 좋아요

무관한 내용임에도 좋은 링크 남겨주셔서 감사합니다 ㅠㅅㅠ

1개의 좋아요