아래 댓글 답이 있네요. 리액트만의 문제는 아니고
SDK 코드를 보니까 document.write로
"//t1.daumcdn.net/mapjsapi/js/main/4.2.0/kakao.js" 스크립트 태그를 html로 쓰고 있네요
Failed to execute ‘write’ on ‘Document’: It isn’t possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.
document.write가 실패하면서 스크립트가 안불러와지는것이고
kakao.maps가 텅텅 비어있는것이었네요.
즉 SPA나 최적화를 위해 지도가 나오는 경우에만 스크립트 태그를 추가하는 경우는 안먹는다 이겁니다.
카카오지도만의 문제는 아니지만, SDK가 너무 고전 웹에 쓰는 방식으로만 되어있네요.
document.write는 bad practice라고 생각하고 쓰면 안된다고 생각합니다
답변대로 autoload=false 쿼리 추가하고,
new Promise(window.kakao.maps.load) 해서 쓰니까 잘 되네요