개발자
안녕하세요~!!!! 프로젝트를 만드는 와중에 궁금한게 있어서 질문드립니다 ㅠㅠ 페이지 3개로 구성된 조그만 웹사이트를 리액트를 사용하여 만들고 있습니다. 그런데 문제가 생겼습니다.... 페이지 A에서는 지도 api를 사용하지 않고 B에서만 사용을 하고싶은데 제가 index.html 파일에 지도를 그리는것과 지도에 표시할 마커인 2개의 script를 불러와서 페이지 A에서도 카카오맵이 불러와져 성능에 문제가 생기는 것을 알게 되었습니다. 그래서 첫 번째 사진처럼 지도를 그리는 script를 script에 담아 헤더에 넣고, 마커를 그리는 script를 makerscript에 담아 헤더에 넣었습니다. 결과는 지도만 그려지고 마커가 안 떠서 어덯게 하면 마커가 뜰지 궁금합니다 ㅜㅜ 도와주세요 ...!! 🥲🥲🥲 1-2 사진: Map.jsx 3 사진: 마커 positions을 불러오는 MarkPosition.jsx 4 사진: 마커를 표시하는 위치, 사진 등이 있는 EventMarker.jsx
답변 1
지도와 마커를 따로 sdk를 불러오는 걸 처음 보네요...몇 번 사용했던 기억이 있는데 다시 문서를 확인해보시는 것은 어떨까요?? 그리고 sdk를 헤더에 넣으시는 이유가 따로 있으신가요? 문서에는 body에 넣는 것으로 나옵니다! 또한 성능적인 부분에서 그렇게 크게 차이날지는 의문이 드네요... 직접적으로 React에서 DOM을 조작하는 것이 나중에 문제가 생길 수 있을지도 모르구요! (수정) 잠결에 보느라 제대로 보지 못했네요 실행되는 시점 문제가 아니라 sdk를 두 개로 나눠 불러오는 부분이 문제인 거 같아요! 공식문서 보면 불러온 sdk 하나로 다 사용하거든요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 01월 24일
첫 번째로, 문제가 있는 코드에 접근하지 못하여 마커가 나타나지 않는 이유를 정확히는 파악하기 어렵습니다. 그러나 일반적으로 마커가 표시되지 않는 이유 중 하나는 지도 초기화 작업이 완전히 끝나지 않은 상태에서 마커를 추가하려고 시도한 경우입니다. 리액트에서 외부 스크립트(여기서는 카카오 맵 API)를 사용하는 방법을 제안드리겠습니다. index.html 파일에 스크립트 태그를 추가하는 대신, 리액트 컴포넌트 내에서 동적으로 스크립트를 로드할 수 있습니다. 이렇게 하면, 원하는 컴포넌트(render 메소드 또는 useEffect 훅 안)에서만 스크립트를 로드하므로 성능 문제를 개선할 수 있습니다. 다음과 같은 함수로 외부 스크립트를 동적으로 로드할 수 있습니다: ```javascript function loadScript(url, callback) { let script = document.createElement("script"); script.type = "text/javascript"; if (script.readyState) { // Internet Explorer script.onreadystatechange = function() { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; callback(); } }; } else { // Other browsers script.onload = function() { callback(); }; } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); } ``` 위 함수는 주어진 URL에서 스크립트를 로드하고, 로딩이 완료되면 콜백 함수를 실행합니다. 이 함수를 사용하여 카카오 맵 API 스크립트를 로드한 후, 마커 추가 작업을 수행할 수 있습니다. 제안드린 방법을 사용하면 지도가 완전히 로드된 후에만 마커를 추가하게 되므로, 원래 겪고 계신 문제를 해결할 가능성이 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!