티스토리 뷰
카카오맵 API를 이용하던 도중, 위와 같은 에러가 발생했다. window.kakao.maps에 LatLng가 없어서 그런 것 같아, console.log를 이용해 확인해보았다.
console.log(window.kakao.maps);
그랬더니 정말로 LatLng가 없었다. 정말로 없어서 동작하지 않았던 것이다. 그런데 분명 처음 카카오맵 api를 이용했을 때는 에러가 발생하지 않았었는데 갑자기 이러니 당황스러웠지만, 어쨌든 이를 해결하기 위해 구글링을 해보았다. 그리고 이에 대한 원인을 찾을 수 있었다.
script가 완전히 로드되기 전에 map 관련 메소드를 실행하려고 했기 때문에 에러가 발생했던 것아다.
이를 해결하기 위해서 kakao에서 제공하는 load라는 메소드를 이용하면 된다고 하여, 다음과 같이 코드를 작성하였다.
// KakaoMap.tsx
import styled from "styled-components";
import React, { useEffect } from "react";
import { checkValidAddress } from "../../utils/functions";
interface IProps {
width: string;
height: string;
address?: string;
name?: string;
}
const Map = styled.div<IProps>`
width: ${(props) => props.width};
height: ${(props) => props.height};
`;
export default function KakaoMap(props: IProps) {
useEffect(() => {
window.kakao.maps.load(() => {
const container = document.getElementById("map"); //지도를 담을 영역의 DOM 레퍼런스
const options = {
//지도를 생성할 때 필요한 기본 옵션
center: new window.kakao.maps.LatLng(33.450701, 126.570667), //지도의 중심좌표.
level: 3, //지도의 레벨(확대, 축소 정도)
};
const map = new window.kakao.maps.Map(container, options); //지도 생성 및 객체 리턴
// 주소-좌표 변환 객체를 생성
const geocoder = new window.kakao.maps.services.Geocoder();
// 주소로 좌표를 검색
geocoder.addressSearch(
props.address,
function (result: any, status: any) {
// 정상적으로 검색이 완료되었을 때
if (status === window.kakao.maps.services.Status.OK) {
const coords = new window.kakao.maps.LatLng(
result[0].y,
result[0].x
);
// 결과값으로 받은 위치를 마커로 표시
const marker = new window.kakao.maps.Marker({
map,
position: coords,
});
// 운포윈도우로 장소에 대한 설명 표시
const infowindow = new window.kakao.maps.InfoWindow({
content: `<div style="width:150px;text-align:center;padding:6px 0;">${props.name}</div>`,
});
infowindow.open(map, marker);
// 지도와 중심을 결과값으로 받은 위치로 이동
map.setCenter(coords);
} else if (status === null) {
// 정상적으로 주소강 입력되지 않았을 때
alert("주소가 잘못 입력되었습니다!");
}
}
);
});
}, []);
return <Map id="map" width={props.width} height={props.height}></Map>;
}
kakao.map.load 속에 카카오맵을 불러오는 코드들을 넣었더니 제대로 동작하였다. 여담이지만, 며칠 전에도 이 방법을 똑같이 적용했었는데도 에러가 계속 발생했었다. 그리고 오늘 다시 이 방법을 적용했는데 오늘은 해결이 되었다. 도대체 뭐가 달라졌던 걸까.
참고한 글
https://marklee1117.tistory.com/83
[Solved] kakao.maps.LatLng is not a constructor
카카오 지도를 띄우려고 하다보면, 위와 같은 에러메시지를 만날 수 있다. 어떻게 해결 할 수 있는지 알아보자. 이전에, 내가 어떻게 지도를 띄우는지 정리한 글을 포스팅 한적이 있다. 그 방식
marklee1117.tistory.com
https://devtalk.kakao.com/t/typeerror-kakao-maps-latlng-is-not-a-constructor/113413
카카오지도 맵TypeError: kakao.maps.LatLng is not a constructor 에러
react를 이용해 웹을 만드는과정에, 이런 에러가 나옵니다. header에는 autoload=false파라미터를 써넣었고, /global kakao/ 를 이용해 kakao를 인식할수 있게도 해 두었습니다. 어떤 이유일까요 ?
devtalk.kakao.com
'기록' 카테고리의 다른 글
(짧음) 정적 파일을 제공하는데 필요한 express.static() (0) | 2023.06.18 |
---|---|
카카오맵 api 적용한 코드 기록 (0) | 2023.06.15 |
fetch GET 요청의 response와 axios GET(axios.get)의 response 차이 (0) | 2023.06.13 |
TS 연습 프로젝트 23/06/04 ~ 23/06/11 (0) | 2023.06.11 |
(TypeScript) react-hook-form에서 form과 input을 분리하는 법 (0) | 2023.06.06 |
- Total
- Today
- Yesterday
- 다이나믹프로그래밍
- 브루트포스
- aws
- Redux
- Next.js
- BFS
- 코드스테이츠
- 프로그래머스
- typescript
- 순열
- C++
- 완전탐색
- CSS
- 햄버거버튼
- 타입스크립트
- 동적계획법
- 스택
- 리액트
- react
- SQL
- 백준
- 카카오맵
- themoviedb
- 알고리즘
- 비트마스킹
- NextJS
- async
- 자바스크립트
- 넥스트js
- 구현
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |