해결된 질문
작성
·
510
·
수정됨
0
중고마켓 구현 중에 계속 구글링해도 해결이 안돼서 질문드립니다ㅠ
Header에 판매하기 Link가 있고, 클릭하면 /product/new 로 이동하게 했습니다
주소창에 직접 주소를 입력해서 들어가면 에러가 안뜨는데, 버튼을 클릭해서 들어가면
TypeError: window.kakao.maps.LatLng is not a constructor 에러가 발생하는데
원인이 뭘까요 ....??
Header
<Link href="/product/new">
<a>
<S.HeaderIcon>
판매하기
</S.HeaderIcon>
</a>
</Link>
BoardWrite
declare const window: typeof globalThis & {
kakao: any
}
export default function BoardWrite(props: IBoardWriteProps): JSX.Element {
const router = useRouter()
const { setValue, trigger } = useForm({
mode: "onChange",
})
useEffect(() => {
const script = document.createElement("script")
script.src =
"https://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=앱키"
document.head.appendChild(script)
script.onload = () => {
window.kakao.maps.load(function () {
const container = document.getElementById("map") // 지도를 담을 영역의 DOM 레퍼런스
const options = {
// 지도를 생성할 때 필요한 기본 옵션
center: new window.kakao.maps.LatLng(37.462381, 126.813369), // 지도의 중심좌표.
level: 3, // 지도의 레벨(확대, 축소 정도)
}
const map = new window.kakao.maps.Map(container, options) // 지도 생성 및 객체 리턴
})
}
}, [])
답변 1
0
안녕하세요! nana님!
해당 내용은 수업에서 설명되고 있는 SPA관련 내용인데요!
잘 따라와 주셨으나 한가지 빠뜨린게 있네요!
카카오 라이브러리를 다운로드 받아오기 위해 앱키를 제공해 주셔야하는데!
아래 nana님의 코드에서 appkey=앱키 부분에 들어가야하는 앱키는 실제로 카카오 개발자 사이트로부터 발급받은 키값이 들어가야합니다!^^
script.src =
"https://dapi.kakao.com/v2/maps/sdk.js?autoload=false&appkey=앱키"
해당 내용을 수정하여 다시 시도해 보세요!
네! nana님!
아마도 중고마켓 코드와 현재 위에 올려주신 코드가 다른 것 같네요!
위에 올려주신 코드에서 앱키만 변경하여 그대로 테스트해본 결과 정상적으로 작동됩니다.
해당 수업에서와 마찬가지로 1. 주소창에 다이렉트 입력하는 경우, 2. 다른 페이지에서 버튼을 클릭하여 넘어오는 경우 총 2가지를 모두 테스트해본 결과 정상적으로 작동합니다.
해당 코드의 문제가 아니고, 이를 중고마켓에 적용함으로써 다른 연결된 컴포넌트 등과의 관계로 인하여 코드가 꼬이게 된 것 같네요.
원리는 동일하기 때문에, 이를 포함하고 있는 컴포넌트와 연관된 다른 컴포넌트들의 중복렌더링 등으로 발생하는 이슈, 또는 컴포넌트의 사라짐 현상 등 다양하게 확인해보아야 할 문제인 것 같아요!
이럴 때는, 조급하게 하려고 하지 마시고, 렌더링 순서를 따져가며(불필요한 부분을 주석해가며) 제대로 정리를 한 번 하셔야 해요!
시간이 많이 걸리실 수 있으며, 이러한 복잡한 상황을 해결함으로써 한단계 더 성장하실 것 같네요!
반드시 해결하고 넘어가시길 권장드립니다!
아 질문할때 앱키 노출이 안되게 하려고 발급받은 키값 지우고 제가 임의로 적어뒀습니다!ㅠ
그래서 주소창에 직접 주소를 입력해서 들어가면 정상적으로 작동이 되거든요..
그 부분말고 다른 부분에 문제가 없는걸까요..?