State Management
react-naver-maps의 대부분 컴포넌트는 uncontrolled 방식으로 동작합니다. 즉, 생성 시 초기값을 주고 이후에는 네이버 지도 인스턴스가 상태를 관리합니다. 반대로 controlled 방식은 React state를 기준으로 항상 값을 밀어 넣는 형태입니다.
언제 uncontrolled가 좋을까요?
- 지도 상호작용(드래그/줌)이 많고, 자연스러운 UX가 중요한 경우
- 내부 상태를 네이버 지도 SDK에 맡기는 편이 더 간단한 경우
- 큰 데이터나 이벤트가 잦아 React 렌더링 비용을 줄이고 싶은 경우
언제 controlled가 필요할까요?
- URL 상태, 전역 스토어와 강하게 동기화해야 하는 경우
- 외부 입력(버튼/폼)으로 지도 상태를 명확히 통제해야 하는 경우
- 특정 시점에만 값을 확정적으로 갱신해야 하는 경우
Uncontrolled
라이브 예제
코드
import { Map } from "@rousen/react-naver-maps";
function App() {
return (
<Map
ncpKeyId="your-ncp-key-id"
initialOptions={{
zoom: 13,
center: { lat: 37.566826, lng: 126.9786566 },
}}
/>
);
}
Controlled
라이브 예제
코드
import { Map } from "@rousen/react-naver-maps";
import { useState } from "react";
function App() {
const [zoom, setZoom] = useState(13);
const [center, setCenter] = useState<naver.maps.Coord>({
x: 126.9786566,
y: 37.566826,
});
return (
<>
<Map
ncpKeyId="your-ncp-key-id"
center={center}
zoom={zoom}
initialOptions={{ center, zoom }}
onCenterChanged={(nextCenter) => setCenter(nextCenter)}
onZoomChanged={(nextZoom) => setZoom(nextZoom)}
/>
<button onClick={() => setZoom((z) => z + 1)}>줌 인</button>
</>
);
}
주의 사항
initialOptions는 지도 생성 시에만 적용됩니다. 변경이 필요한 값은center,zoom으로 제어하세요.center,zoom은 변경 시 지도 인스턴스에 즉시 반영됩니다.