Skip to content

Commit 60a9f52

Browse files
committed
docs: enhance camera control documentation with controlled props pattern
- Add initial vs controlled props explanation with React state binding pattern - Fix tabs implementation with correct value matching - Add performance optimization callout for onCameraChanged debouncing - Update meta.json to remove "Working In Progress" status - Improve MDX components export structure for tabs
1 parent 51e2614 commit 60a9f52

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

docs/content/docs/camera-control.mdx

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,62 @@ title: "Camera Control"
33
description: "카메라 제어 문서"
44
---
55

6-
import { Tabs, Tab } from 'fumadocs-ui/components/tabs'
76
import { Callout } from 'fumadocs-ui/components/callout'
87

98
## 개요
109

1110
네이버 지도의 카메라를 제어하여 지도의 중심점, 줌 레벨, 회전, 기울기 등을 조정하는 방법을 안내합니다.
1211

12+
## Initial vs Controlled Props
13+
14+
NaverMapView는 초기 설정용과 제어용 props를 구분하여 제공합니다:
15+
16+
- **Initial props** (`initialCamera`, `initialRegion`): 지도가 처음 로드될 때만 적용되는 초기값
17+
- **Controlled props** (`camera`, `region`): 값이 변경될 때마다 지도가 해당 위치로 이동하는 제어된 속성
18+
19+
### 제어된 속성 사용 패턴
20+
21+
제어된 속성을 사용할 때는 React state와 콜백을 조합하여 양방향 데이터 바인딩을 구현합니다:
22+
23+
```tsx title="ControlledCameraExample.tsx"
24+
import React, { useState } from 'react';
25+
import { NaverMapView, Camera } from '@mj-studio/react-native-naver-map';
26+
27+
const ControlledCameraExample = () => {
28+
const [camera, setCamera] = useState<Camera>({
29+
latitude: 37.5665,
30+
longitude: 126.9780,
31+
zoom: 14,
32+
});
33+
34+
return (
35+
<NaverMapView
36+
style={{ flex: 1 }}
37+
camera={camera} // 제어된 속성: state 변경 시 지도 이동
38+
onCameraChanged={({ latitude, longitude, zoom, bearing, tilt }) => {
39+
// 사용자가 지도를 조작하면 state 업데이트
40+
setCamera({ latitude, longitude, zoom, bearing, tilt });
41+
}}
42+
/>
43+
);
44+
};
45+
```
46+
47+
<Callout type="warn">
48+
**성능 최적화 권장사항**: `onCameraChanged`와 같은 카메라 콜백은 사용자가 지도를 조작할 때 매우 빈번하게 호출됩니다. 성능상의 이유로 debounce를 적용하여 과도한 state 업데이트나 API 호출을 방지하는 것을 권장합니다.
49+
</Callout>
50+
51+
### 사용 시나리오
52+
53+
- **초기값만 설정** (`initialCamera`/`initialRegion`): 지도 첫 로딩 시 위치만 지정하고, 이후 사용자가 자유롭게 조작
54+
- **완전 제어** (`camera`/`region`): 앱에서 지도 위치를 완전히 제어하고, props 변경 시마다 지도 이동
55+
1356
### Camera vs Region
1457

1558
네이버 지도에서는 두 가지 방식으로 지도 위치를 설정할 수 있습니다:
1659

1760
<Tabs items={['Camera', 'Region']}>
18-
<Tab value="Basic">
61+
<Tab value="Camera">
1962
**Camera**: 정확한 줌 레벨과 각도 제어
2063
```tsx title="CameraExample.tsx"
2164
import { NaverMapView, Camera } from '@mj-studio/react-native-naver-map';
@@ -36,7 +79,7 @@ import { Callout } from 'fumadocs-ui/components/callout'
3679
/>
3780
```
3881
</Tab>
39-
<Tab value="Basic">
82+
<Tab value="Region">
4083
**Region**: 표시할 영역 범위로 설정
4184
```tsx title="RegionExample.tsx"
4285
import { NaverMapView, Region } from '@mj-studio/react-native-naver-map';

docs/content/docs/meta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"installation",
88
"---Usage---",
99
"components",
10-
"---Guides (Working In Progress)---",
10+
"---Guides---",
1111
"marker-clustering",
1212
"camera-control",
1313
"optimization",

docs/src/mdx-components.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createGenerator } from 'fumadocs-typescript';
22
import { AutoTypeTable } from 'fumadocs-typescript/ui';
3-
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
3+
import * as TabsComponents from 'fumadocs-ui/components/tabs';
44
import defaultMdxComponents from 'fumadocs-ui/mdx';
55
import type { MDXComponents } from 'mdx/types';
66

@@ -16,8 +16,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents {
1616
AutoTypeTable: (props) => (
1717
<AutoTypeTable {...props} generator={generator} />
1818
),
19-
Tab: Tab,
20-
Tabs: Tabs,
19+
...TabsComponents,
2120
...components,
2221
};
2322
}

0 commit comments

Comments
 (0)