본문으로 건너뛰기

Marker

Marker 컴포넌트는 지도 위에 마커를 표시하는 컴포넌트입니다.

기본 사용법

import { Map, Marker } from "@rousen/react-naver-maps";

function App() {
return (
<Map ncpKeyId="your-ncp-key-id">
<Marker position={{ x: 127.0276, y: 37.4979 }} />
</Map>
);
}

Props

Marker 컴포넌트는 naver.maps.MarkerOptions의 모든 속성을 지원합니다.

주요 Props

PropTypeDefaultDescription
positionnaver.maps.Coord | naver.maps.CoordLiteral-마커의 위치 (필수)
iconnaver.maps.Icon | string-마커 아이콘
titlestring-마커 제목 (툴팁)
zIndexnumber-마커의 z-index
clickablebooleanfalse클릭 가능 여부
visiblebooleantrue표시 여부
cursorstring-마커 위 커서 스타일
draggablebooleanfalse드래그 가능 여부
animationnaver.maps.Animation-마커 애니메이션
shapenaver.maps.MarkerShape-마커 클릭 영역

이벤트 핸들러

PropTypeDescription
onClick(event: naver.maps.PointerEvent) => void마커 클릭 시
onDblclick(event: naver.maps.PointerEvent) => void마커 더블 클릭 시
onRightclick(event: naver.maps.PointerEvent) => void마커 우클릭 시
onMouseDown(event: naver.maps.PointerEvent) => void마우스 버튼 누를 때
onMouseUp(event: naver.maps.PointerEvent) => void마우스 버튼 뗄 때
onMouseOver(event: naver.maps.PointerEvent) => void마우스 진입 시
onMouseOut(event: naver.maps.PointerEvent) => void마우스 나갈 시
onTouchStart(event: naver.maps.PointerEvent) => void터치 시작 시 (모바일)
onTouchEnd(event: naver.maps.PointerEvent) => void터치 종료 시 (모바일)
onPositionChanged(position: naver.maps.Coord) => void위치 변경 시
onTitleChanged(title: string) => void제목 변경 시
onVisibleChanged(visible: boolean) => void표시 여부 변경 시
onZIndexChanged(zIndex: number) => voidz-index 변경 시
onClickableChanged(clickable: boolean) => void클릭 가능 여부 변경 시
onDraggableChanged(draggable: boolean) => void드래그 가능 여부 변경 시
onIconChanged(icon: naver.maps.Icon | string) => void아이콘 변경 시
onIconLoaded(marker: naver.maps.Marker) => void아이콘 로드 완료 시

예제

기본 마커

<Map ncpKeyId="your-ncp-key-id">
<Marker position={{ x: 127.0276, y: 37.4979 }} />
</Map>

커스텀 아이콘

<Map ncpKeyId="your-ncp-key-id">
<Marker
position={{ x: 127.0276, y: 37.4979 }}
icon={{
url: "/path/to/icon.png",
size: new naver.maps.Size(32, 32),
anchor: new naver.maps.Point(16, 16),
}}
/>
</Map>

마커 클릭 이벤트

<Map ncpKeyId="your-ncp-key-id">
<Marker
position={{ x: 127.0276, y: 37.4979 }}
onClick={(event) => {
console.log("마커 클릭:", event);
console.log("클릭 위치:", event.coord);
alert("마커가 클릭되었습니다!");
}}
/>
</Map>

드래그 가능한 마커

<Map ncpKeyId="your-ncp-key-id">
<Marker
position={{ x: 127.0276, y: 37.4979 }}
draggable={true}
onPositionChanged={(position) => {
console.log("마커 위치 변경:", position);
}}
/>
</Map>

애니메이션 마커

<Map ncpKeyId="your-ncp-key-id">
<Marker
position={{ x: 127.0276, y: 37.4979 }}
animation={naver.maps.Animation.BOUNCE}
/>
</Map>

여러 이벤트 핸들러 사용

<Map ncpKeyId="your-ncp-key-id">
<Marker
position={{ x: 127.0276, y: 37.4979 }}
onClick={(event) => {
console.log("클릭:", event.coord);
}}
onDblclick={(event) => {
console.log("더블 클릭:", event.coord);
}}
onRightclick={(event) => {
console.log("우클릭:", event.coord);
}}
onIconLoaded={(marker) => {
console.log("아이콘 로드 완료:", marker);
}}
/>
</Map>

여러 마커 표시

const locations = [
{ x: 127.0276, y: 37.4979, title: "위치 1" },
{ x: 127.0286, y: 37.4989, title: "위치 2" },
{ x: 127.0296, y: 37.4999, title: "위치 3" },
];

<Map ncpKeyId="your-ncp-key-id">
{locations.map((location, index) => (
<Marker
key={index}
position={{ x: location.x, y: location.y }}
title={location.title}
/>
))}
</Map>;

동적 위치 변경

import { useState } from "react";

function App() {
const [position, setPosition] = useState({ x: 127.0276, y: 37.4979 });

return (
<>
<Map ncpKeyId="your-ncp-key-id">
<Marker position={position} />
</Map>
<button onClick={() => setPosition({ x: 127.0376, y: 37.5079 })}>
위치 변경
</button>
</>
);
}