카카오 API 사용 설정
이전에 작성한 글에 기본적으로 카카오 API 설정을 어떻게 하는지
API KEY를 어떻게 발급 받는지는 아래의 글에 포스팅 해두었습니다.
카카오 API 연결
<script>
태그 안에 CDN을 기입하고appkey=
이라는 쿼리 안에 발급 받은 KEY 중 Javascript KEY를 기입한다.yarn add react-kakao-maps-sdk
npm install react-kakao-maps-sdk
<Maps.tsx>
// 좌표 값을 담담하는 state
const [coord, setCoord] = useState<Coord>({ lat: 0, lng: 0 });
// 주소를 기반으로 좌표를 주는 API
const geocoder = new kakao.maps.services.Geocoder();
const readUserLocation = () => {
geocoder.addressSearch(
searchAddress,
(result: CoderResult[], status: kakao.maps.services.Status) => {
// result가 빈 배열이거나나 status가 ZERO_RESULT로 나올 때가 있어
// 조건을 걸어두었다.
if (result.length > 0 && status === 'OK') {
// x = 경도, y = 위도를 state에 업데이트
const { x, y } = result[0];
setCoord({
lat: Number(y),
lng: Number(x)
});
}
}
);
};
// mount 시 받아 온 주소의 위도, 경도를 업데이트
useEffect(() => {
readUserLocation();
}, []);
<Map>
컴포넌트는 필수 props로 center가 들어가는데<>
<StModalContainer>
<Map center={coord} style={{ width: '100%', height: '100%' }} draggable>
<StInfoBox position={coord}>
<StOverayBox>{searchAddress}</StOverayBox>
</StInfoBox>
</Map>
<StButtonBox>
<a target="_blank"
href={`https://map.kakao.com/link/to/집,${coord.lat},${coord.lng}`} rel="noreferrer">
<Buttons>길 찾기</Buttons>
</a>
<Buttons onClick={copyAddress} id={searchAddress}>
주소 복사
</Buttons>
</StButtonBox>
</StModalContainer>
</>
// useRef
const scrollRef = useRef<HTMLDivElement>(null);
// 메세지 state가 변경 될 때마다 ref의 current값이 있다면
// ref로 설정 된 요소의 scroll 바 위치를 해당 요소의 총 높이 값으로 설정
useEffect(() => {
if (scrollRef.current) {
const scrollContainer = scrollRef.current;
scrollContainer.scrollTop = scrollContainer.scrollHeight;
}
}, [messages]);
// UI 부분
// 채팅 메세지 div를 ref에 연결해준다.
<St.StChatGround ref={scrollRef}>
<ChatMessages messages={messages} curUser={curUser} />
</St.StChatGround>
const copyAddress = async (e: MouseEvent<HTMLButtonElement>) => {
const address = e.currentTarget.id; // 주소 텍스트
try {
await window.navigator.clipboard.writeText(address);
alert('주소 복사 완료!');
} catch (error) {
console.error('주소 복사 실패:', error);
}
};